200709-OAuth2四种认证方式总结

OAuth2四种授权方式小结

本文主要小结一下oauth2的四种模式的特点和适用场景。

OAuth2四种授权方式

OAuth2定义了四种授权方式:

  1. 密码模式(resource owner password credentials)
  2. 授权码模式(authorization code)
  3. 简化模式(implicit)
  4. 客户端模式(client credentials)

密码模式(resource owner password credentials)

密码模式

密码授权流程

  1. 用户访问应用页面,输入第三方认证所需要的信息(QQ/微信账号密码)
  2. 应用页面拿到用户米和密码信息去认证服务器授权
  3. 认证服务器授权通过,拿到token,访问真正的资源页面

密码授权优点

  1. 不需要多次请求转发和额外开销,同时可以获取更多的用户信息。(都拿到账号密码了)
  2. 支持refresh刷新

密码授权缺点

  1. 因为client可能存了用户密码
  2. 局限性,认证服务器和应用方必须有超高的信赖

密码授权使用场景

  1. 这种模式主要用来做遗留项目升级为oauth2的适配方案
  2. 当然如果client是自家的应用,也是可以

授权码模式(authorization code)

授权码模式

授权码授权流程

  1. 用户访问页面
  2. 访问的页面将请求重定向到认证服务器
  3. 认证服务器向用户展示授权页面,等待用户授权
  4. 用户授权后,认证服务器生成一个code,和带上client_id发送给应用服务器,然后应用服务器拿到code,并将用client_id去后台查询对应的secret
  5. 将code、client_id、client_secret传递给认证服务器换取access_token和refresh_token
  6. 认证服务器将access_token和refresh_token传给应用服务器
  7. 验证token,访问真正的资源页面

授权码授权优点

  1. 这种模式算是正宗的oauth2的授权模式
  2. 安全性高,
    有token过期时间;serect存在服务器端;第四步、第五步服务器到服务器访问,很难被截获

授权码授权缺点

  1. 多次请求,性能会有一定影响

授权码授权使用场景

  1. 目前市面上主流的第三方验证都是使用这种模式

隐式模式(implicit grant)

隐式模式

隐式授权模式流程

  1. 用户访问应用页面
  2. 重定向到认证服务器
  3. 用户授权
  4. 跳转到应用页面,并返回token信息
  5. 拿token去访问资源服务器

隐式授权模式优点

  1. 简单,比授权码模式少了code环节,回调url直接携带token

隐式授权模式缺点

  1. 基于安全性考虑,建议把token时效设置短一些
  2. 不支持refresh token

隐式授权模式使用场景

  1. 使用场景是基于浏览器的应用
  2. 应用只有页面,没有后台管理,只能使用第三方认证后,直接访问
  3. 不支持refresh token

客户端凭证授权(Client Credentials Grant)

客户端凭证授权

客户端凭证授权流程

  1. 用户访问应用页面
  2. 直接根据client_id和secret即可获取token,
  3. 使用token访问资源服务器

客户端凭证授权优点

  1. 最简单的模式,只要client请求,我们就将AccessToken发送给它
  2. 无需用户参与

客户端凭证授权缺点

  1. 要求我们对client完全的信任

客户端凭证授权使用场景

  1. 为后台api服务消费者设计,不需要用户的参与
  2. 不支持refresh token,主要是没有必要

refresh token的初衷主要是为了用户体验不想用户重复输入账号密码来换取token,因而设计了refresh token用于换取新token
这种模式由于没有用户参与,而且也不需要用户账号密码,仅仅根据自己的id和密钥就可以换取新token,因而没必要refresh token

小结

  • 密码模式(resource owner password credentials)(为遗留系统设计)(支持refresh token)
  • 授权码模式(authorization code)(正宗方式)(支持refresh token)
  • 简化模式(implicit)(为web浏览器应用设计)(不支持refresh token)
  • 客户端模式(client credentials)(为后台api服务消费者设计)(不支持refresh token)

参考资料

  1. OAuth2简易实战(一)-四种模式
  2. oauth2四种授权方式小结
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×