无感刷新是一种技术手段,用于在用户不知情的情况下自动更新用户的访问令牌(access token)。这种技术通常用于基于OAuth 2.0协议的认证系统中,以确保用户会话的安全性和连续性。以下是无感刷新的基本概念及其工作原理:
基本概念
- Access Token: 访问令牌,用于客户端向受保护的资源发起请求时携带,以证明自己的身份。
- Refresh Token: 刷新令牌,用于客户端在access token即将过期或已经过期时,向认证服务器请求一个新的access token。
- Authorization Server: 认证服务器,负责管理用户身份验证过程,发放和管理access tokens和refresh tokens。
- Resource Server: 资源服务器,提供受保护的资源,需要有效的access token才能访问。
工作流程
-
初次登录:
- 用户登录应用。
- 应用向认证服务器发送身份验证请求。
- 认证服务器验证用户身份后,返回一个access token和一个refresh token给应用。
-
使用Access Token:
- 客户端(通常是Web应用或移动应用)使用access token访问资源服务器提供的资源。
-
Access Token过期:
- Access token有一个有限的有效期,当它过期时,客户端无法再使用它来访问资源。
-
无感刷新:
- 当access token接近过期时(通常是在过期前几分钟),客户端自动使用refresh token向认证服务器请求一个新的access token。
- 认证服务器验证refresh token的有效性,并生成一个新的access token。
- 新的access token被返回给客户端。
- 客户端收到新的access token后,会用它替换旧的access token,并继续正常使用,整个过程中用户没有察觉到任何中断。
-
Refresh Token过期或失效:
- Refresh token也有一个有效期,当它过期时,用户需要重新登录以获取新的access token和refresh token。
- 如果refresh token被服务器撤销或标记为无效,则用户同样需要重新登录。
优点
-
- 无缝体验:用户在使用应用时不会感觉到认证过程中的中断。
- 安全性:access token的有效期较短,减少了潜在的安全风险;refresh token则存储在客户端的安全位置,用于获取新的access token。
- 效率:避免了频繁的身份验证过程,减少了服务器负载
- 注意事项
- 刷新时机:客户端需要合理地确定何时启动无感刷新流程,通常是在access token过期前的一定时间内。
- 刷新失败后的处理:如果刷新失败,客户端需要有适当的机制来处理这种情况,比如提示用户重新登录。
- 刷新令牌的安全存储:客户端需要确保refresh token的安全存储,防止被恶意软件或第三方窃取。
为什么不采取:发送过期token 给后端后,后端检测到过期token ,直接在响应头添加新的token 的方案呢,双token 有什么优势吗
前端在 access token 过期时发送过期的 token 到后端,后端检测到过期后在响应头中返回新的 token。这种方法的主要问题是它违反了 OAuth 2.0 协议的规范,因为 OAuth 规定过期的 token 应被视为无效,不应被用于任何进一步的操作。
工作中具体操作
与后端沟通,提供refresh token接口,当登录时,返回access token和用于刷新的refresh token,在响应拦截器中判断token是否过期,可以在还剩几分钟时,调用refresh token接口,从而获取新的token。
- Refresh token也有一个有效期,当它过期时,用户需要重新登录以获取新的access token和refresh token。
- 如果refresh token被服务器撤销或标记为无效,则用户同样需要重新登录。