OAuth2.0及token刷新流程

最近面试遇到了客户端授权登陆流程的问题,于是记录一下,目前最流行的方案就是OAuth2.0了。

一、首先来看一下OAuth2.0的原理

OAuth 2.0 是一种授权机制,主要用来颁发令牌(token)。而在传统的客户端-服务端授权模型中,客户端想要请求服务端受保护的资源就必须通过资源拥有者的凭证。但是为了提供给第三方应用访问资源的权限,那么资源拥有者就必须把这个凭证共享给第三方,此时会出现几个问题:

1、第三方应用需要存储资源拥有者的凭据以供以后使用,通常密码以明文形式。

2、服务端需要支持密码认证,尽管这种来自密码的安全性比较弱。

3、第三方应用获得资源的广泛的权限,是的资源拥有者不能限制访问时间和权限。

4、资源拥有者不能中断单个第三方的访问权限,除非中断所有的第三方权限,这时就必须修改密码了。

OAuth通过引入authorization层解决了这些问题,并且将资源拥有者和客户端这些角色分离开来。替代使用资源拥有者的凭据,而是使用一个权限令牌token,它具有具体的范围限制,生命周期,以及其他的权限属性。

OAuth定义了四个角色:分别是resource owner、resource server、client、authorization server。

resource owner 是可以授权资源权限的一个实体,一般指的是终端用户;

resource server 是部署资源的服务器,它可以接收并且响应对资源的携带token的请求;

client 是指应用,比如服务端应用,桌面应用,或者其他的设备应用;

authorization server 它是发行token给client的服务器;

这四个角色直接的交互可以参考下图

OAuth2.0及token刷新流程

这是从请求授权,到生成token并访问数据资源的完整的流程示意图

步骤:

  (A) 客户端应用向资源拥有者申请授权

  (B) 资源拥有者同意授权 

  (C) 客户端拿到同意授权的许可向授权服务器请求获取令牌token

  (D) 授权服务器授权成功生成token并返回给客户端

  (E) 客户端使用token请求资源服务器,一般token放于请求头中

  (F) 资源服务器返回客户端需要的数据资源,到此流程结束

在此流程中以后的请求中,有一个重要的环节,就是刷新token,我们不能每次请求数据都要重新授权获取新的token,这样浪费资源,也不合理。

OAuth 2.0 允许用户自动更新令牌。具体方法是,授权服务器发行令牌的时候,一次性发行两个令牌,一个用于获取数据,另一个用于获取新的令牌(refresh token 字段)。令牌到期前,用户使用 refresh token 发一个请求,去更新令牌。

那么具体的刷新token的实现,稍后更新....

 

上一篇:分布式事务相关


下一篇:登陆实现流程(前端角度)