Access Token 与 Refresh Token

  access token 是在 Oauth2.0 协议中,客户端访问资源服务器的令牌(其实就是一段全局唯一的随机字符串)。拥有这个令牌代表着得到用户的授权。它里面包含哪些信息呢?答案是:

 

  哪个用户  在什么时候  授权给哪个客户端  去做什么事情

 

  对于 Oauth2.0 不了解的读者,请看我的另一篇文章:简单介绍 Oauth2.0 原理

 

  这个授权是临时的,有一定有效期。这是因为,access token 在使用的过程中可能会泄露。给 access token 限定一个较短的有效期可以降低因 access token 泄露而带来的风险。

  然而引入了有效期之后,客户端使用起来就不那么方便了。每当 access token 过期,客户端就必须重新向用户索要授权。这样用户可能每隔几天,甚至每天都需要进行授权操作。这是一件非常影响用户体验的事情。希望有一种方法,可以避免这种情况。

  于是 Oauth2.0 引入了 refresh token 机制。refresh token 的作用是用来刷新 access token。鉴权服务器提供一个刷新接口,例如:

 

  POST /refresh

   参数: refreshtoken

   返回:新的 access token

 

  传入 refresh token,鉴权服务器验证通过后,返回一个新的 access token。为了安全,Oauth2.0 引入了两个措施:

  1,Oauth2.0 要求,refresh token 一定是保存在服务器上(应用方的服务器)的,而绝不能存放在狭义的客户端(例如移动 app、PC端软件、浏览器) 上。调用 refresh 接口的时候,一定是从服务器到服务器的访问;

  2,Oauth2.0 引入了 client_id 、client_secret 机制。即每一个应用都会被分配到一个 client_id 和一个对应的 client_secret。应用必须把 client_secret 妥善保管在服务器上,决不能泄露。刷新 access token 时,需要验证这个 client_secret。

  于是,实际上的刷新接口应该是类似这样的:

 

  POST /refresh

   参数:

    refresh token

    client_id

    signatrue 签名,由 sha256(client_id + refresh_token + client_secret) 得到

   返回:新的 access token

 

  以上就是 refresh token 机制。refresh token 的有效期非常长,会在用户授权时,随 access token 一起重定向到回调 url,传递给应用。

 

        若有疑问,可以直接评论。

 

posted @ 2015-05-23 14:50  尹三黎  阅读(23853)  评论(1编辑  收藏