OAuth2 鉴权 Token 获取流程
1.1 注册应用 在使用 OAuth2 进行鉴权之前,第三方开发者需要在授权服务器上注册应用,获取客户端 ID 和客户端密钥。这些凭证将用于获取访问 Token。根据具体授权服务器的实现,可能还需要提供应用的重定向 URL。
1.2 用户登录授权 用户需要在第三方应用提供的登录页面中输入自己的账号和密码,以发起授权请求。授权请求将被发送到授权服务器上进行验证。
1.3 获取授权码 通过用户的登录授权,授权服务器将返回一个授权码给第三方应用。这个授权码将在后续阶段用于获取访问 Token。
1.4 通过授权码获取访问 Token 第三方应用使用授权码向授权服务器请求访问 Token。在请求中,需要提供客户端 ID、客户端密钥、授权类型(一般为“authorization_code”)、授权码、以及重定向 URL。授权服务器验证这些信息后,将颁发访问 Token 给第三方应用。
Token 的使用与刷新
1.1 使用访问 Token 第三方应用在请求被保护的资源时,需要在请求头中携带访问 Token。服务器根据 Token 的有效性进行授权判断,并提供相应的资源或执行相应的操作。
1.2 刷新访问 Token 访问 Token 通常会设置有效期,一旦过期,第三方应用需要通过刷新 Token 来获取新的有效 Token。刷新 Token 时,需要提供客户端 ID、客户端密钥、刷新 Token、授权类型(一般为“refresh_token”)等信息。授权服务器验证这些信息后,颁发新的访问 Token。
几个重要的参数:
access_token:授权认证后的令牌
refresh_token: access_token失效后,刷新token的令牌
expires_in: token过期时间
1、通过账号密码登陆后,会获取到token(授权令牌)、refresh_token(用于刷新token的令牌)、expire_time(令牌token的时效)这三个信息,将这三个连同登陆的时间点(login_time)保存下来以供后续刷新token使用。
2、在以后的操作过程中,每次请求接口时,都检查当前时间current_time与登陆时间login_time的时间差与时效expire_time的大小,如果current_time-login_time大于expire_time亦或者某个阀值,则就使用refresh_token去重新获取token,来更新本地存储的token以达到刷新的目的。
注意一点是,refresh_token的失效性要比token的时效性长很多,这样可以实现token的一直刷新了;但是如果用户长时间为操作,那么refresh_token也过期了,就会强制用户登出。
另外在刷新token时,还有一个方案,一般是使用轮询机制,定期请求刷新token,此方法实现起来稍微简洁些。