refresh token 解读

2,066 阅读2分钟

转自连接: auth0.com/learn/refre…

1. refresh token 是什么

  • 现代安全应用经常使用 access tokens 来确定用户对指定资源的访问权限.
  • 出于不同的原因, 这些 access tokens 都有有限的生命周期:
    • 首先, 限制 access tokens 的生命周期即限制了攻击者使用盗取 token 的时间.
    • 其次, 这些 access tokens 包含的用户及相关信息可能会失效或变更.
  • 当这些 access tokens 过期或者无效, 而应用依然需要访问被保护资源时, 应用会面临只有强制用户再次授权才能获取新 access token 的问题.
  • 为了解决这个问题, OAuth 2.0 引入了 refresh token. 可以在不提示用户的情况下获取新的 access token.

2. 获取 refresh tokens

  • 应用可以在获取 access token 的同时获取 refresh token.
  • 许多授权服务器实现了OpenID Connect specification 定义的 refresh token request mechanism. 在这种情况下, 应用在初始化请求授权码时必须包含offline_access 域.
  • 在用户成功认证并授权获取被保护资源后, 应用会接收到用来交互 access token 和 refresh token 的授权码.

3. 使用 refresh tokens

  • 当需要 access token 时, 应用可以向后端 token api 发送一个 grant type 为 refresh_tokenpost 请求(web 应用需要包含client secret).
  • 为了使用 refresh token 获取 ID token, 授权服务器需要支持 OpenID Connect, 并且请求的 scope 需要包含 openid.
  • 由于 refresh tokens 是长时间生效的, 授权服务器可以使其无效.
  • 以下原因可以使 refresh token 无效:
    • 授权服务器取消 refresh token
    • 用户取消授权
    • refresh token 过期
    • 资源的授权机制发生变更(例如: 原来认证只需要用户名和密码, 现在需要MFA)
  • 由于 refresh tokens 有可能长时间有效, 开发者需要确保他们被安全保存防止泄露.
  • For example, on web applications, refresh tokens should only leave the backend when being sent to the authorization server, and the backend should be secure.

由于对安全机制不熟, 这句话实在不知道如何翻译.

  • web 应用的 client secret 需要以同样的机制被保存.
  • 移动应用不需要 client secret, 但是他们仍然需要确保 refresh token 被保存在只有客户端应用可以访问的地方.