转自连接: 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_token
的post
请求(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 被保存在只有客户端应用可以访问的地方.