Fork me on GitHub

OAuth的理解

OAuth

角色:

  1. 站点A
  2. 站点A的用户user
  3. 站点B

前提条件

  1. 用户user属于站点A
  2. 站点A的用户认证体系里面分发给了站点B一些认证信息,client_id和sercet_id等信息。
  3. 用户user关联了站点A分发的各个client_id信息,包括站点B的。用于日后这些第三方站点的访问授权。

开始授权:(认证服务器不一定是站点A,但是这里概念上视为相同)

  1. 用户user登录站点B
  2. 站点B使用先前分发的client_id和secret_id以及其他重定向信息作为参数重定向到站点A的认证接口。
  3. 站点A确认了站点B的认证信息后,弹出页面询问用户user.
  4. 用户user未登录,先登录,已登录,直接询问。
  5. 用户user登录站点A或者已登录后点击站点A上的统一授权给站点B按钮
  6. 站点A得到了用户user的同意,生成一个code并保存在redis(或者其他存储,一般十分钟有效),然后重定向到站点B给的那个重定向地址,并带上code
  7. 站点B的那个重定向地址得到这个code并和先前的client_id等信息合并作为参数再次向认证服务器请求获取access_token,站点A在缓存中发现这个code是正确的,则通过授权,生成accesstoken返回重定向到站点B给的那个重定向地址,同时带上accesstoken,至此,站点B就拿到了授权

注意,

  1. 这里的站点B的那个重定向地址请求了两次,一次是拿到code,一次是拿到access_token。
  2. 这里的用户授权允许页面是由认证服务器发起的,所以第三方即站点B是无法绕过站点A的用户授权页面。

理解OAuth 2.0-阮一峰的网络日志

-------------本文结束感谢您的阅读-------------
如果您觉得受益了,欢迎打赏鼓励。