OAuth2认证流程

用Oauth2.0做认证也有一段时间了,但是总会忘记,整理一下,备忘吧

 

用户在第三方应用上点击登录,第三方应用通过浏览器跳转,将用户导向认证服务器,同时向服务器传送三个必须的参数:

 

  • client_id:必须参数,注册应用时获得的API Key。
  • response_type:必须参数,此值一般固定为“code”。
  • redirect_uri:必须参数,授权后要回调的URI,即认证成功后的回跳地址

 

此时服务器会在session中检测当前用户是否登录

 

  1. 如果已经登录,则检查用户是否对该应用授权

  •   如果已经授权,直接通过浏览器跳转,重新定向到第三方应用的回调地址上,同时会传递一个code给第三方应用
  1. 如果未登录,跳转到认证中心的登录界面,让用户登录,写相应的session,并保存sessionID,登录完成后再检查授权情况
  • 如果未授权,跳转到授权页面,询问用户是否授权,授权完成后, 重新定向到第三方应用的回调地址上,同时会传递一个code给第三方应用

 

 

第三方应用接收到code之后(通过get方式从url中获取),需要拿这个code向认证服务器换取access_token:

 

一般会通过post方式向认证服务器发送一下信息

 

  • grant_type:必须参数,此值为“authorization_code”;
  • code:必须参数,通过上面第一步所获得的Authorization Code;
  • client_id:必须参数,应用的API Key;
  • client_secret:必须参数,'应用的Secret Key;
  • redirect_uri:必须参数,该值必须与获取Authorization Code时传递的“redirect_uri”保持一致

认证服务会使用以上几个参数通过一定算法,生成三个参数

 

  • access_token 访问api时用的token
  • refresh_token 更新access_token时使用,不一定是必须,看认证服务设置情况而定
  • exprise_in ,access_token的过期时间

认证服务器会将上面三个参数返回给第三方应用

第三方应用得到 access_token之后,缓存下来,在调用api的时候在url中附上access_token

认证服务器检查这个access_token是否存在,是否过期,和当前session用户是否匹配,以确认能否允许第三方应用调用该接口

------------------------->以上为通用的web  server oauth认证流程,还有两种方式user-agent方式和password方式,password方式一般通过https直接向认证服务器请求access_token,通过post方式向认证服务器发送一下信息

 

 

  • grant_type:必须参数,此值为“password”;
  • username:必须参数,用户名;
  • password: 必须参数,密码;
  • client_id:必须参数,应用的API Key;
  • client_secret:必须参数,'应用的Secret Key;
  • redirect_uri:必须参数,回调通知地址。

认证服务器获得上述信息后,验证用户名,密码,生成access_token,refresh_token,exprise_in三个参数,直接返回给第三方应用

user-agent和websever方式差不多,只是没有code生成过程,在用户登录授权后直接返回access_token

你可能感兴趣的:(PHP编程,设计模式,备忘录)