认证机制:对与单token的认证机制在我们项目中仅使用一个Access Token的访问令牌进行用户身份认证和授权的方案处理。
不足之处:
操作机制:双Token主要包含了AccessToken (访问令牌) 和 RefreshToken (刷新令牌),它的出现就是为了解决单token的不足,所以才会引入双token的机制也就是 RefreshToken (刷新令牌),因为它可以延长实际的绘画时间,用户提供了一种安全的方式来去更新AccessToken,并且在必要的时候撤销特定用户的权限,而并不会影响有效的绘画内容。
实时上双token的机制是 o os 2.0标准中常见的一种实现,主要包含两个类型的token,一个是AccessToken (访问令牌) ,一个是RefreshToken (刷新令牌)
AccessToken (访问令牌):它会设置一个有效时间较短的令牌内容,用于的是用户每次请求受保护资源时,进行身份验证的操作,通常直接包含在api请求头或者是URL地址参数之中,用于证明客户端其实是有权限去访问特定的资源的
RefreshToken (刷新令牌):刷新令牌,会设置一个有效时间比较长并且安全存储比较高的一个令牌,主要用于AccessToken过期了以后,去重新获取AccessToken的操作内容。我们并不需要用户去提供一个特殊的登录凭证。因为RefreshToken 一般不会频繁的在网络上进行传输,目的就是为了降低被截取的一个风险
双token有很多优势:
用户登录(主要是用户通过用户名或者是用户码或者其他凭证向服务器去进行访问)---->?
验证通过?(验证我们的一个身份,然后服务器,将会设置一个请求授权)---->
颁发Access Token & Refresh Token(当认证成功了以后,颁发两个内容,一个是Access Token 另一个 Refresh Token,Access Token是一个短期的token(比如几十分钟),Refresh Token是一个长期的token(比如可以设置几天或者更长的时间),这两个token都会返回客户端)----->
客户端存储tokens(并且客户端会进行对应的存储)--->
客户端使用Access Token访问受保护资源(查看Access Token是否已经有过期的风险,当Access Token即将或者已经过期了后,客户端用Refresh Token向服务器发送一个新的请求,获取新的Access Token,服务器验证Refresh Token有效,如Refresh Token有效就会颁发一个新的Access Token,当然在此过程中有两种不同的情况,一种是并不会刷新Refresh Token还有一种在申请Access Token的时候还可能会重新生成Refresh Token,那么这两个token的有效期时间会从当前的时间段往回深延,具体的选择需要根据实际的业务情况进行策略的抉择)--->
客户端更新存储的tokens(客户端接收到新的Access Token以后则需要替换原来的Access Token,并且在新访问的时候则使用新的token进行一个访问)
实时上双token我们可以应用到,单点登录,移动应用或者是web网站应用当中,或者是第三方授权操作处理等
Refresh Token安全的存储,需要去确定客户端确保Refresh Token在本地实现更为安全的存储操作,需要去避免被泄露,被篡改,而且对应Refresh Token需要去实时更为合理的生命周期管理和失效的策略,包括并且不限于我们响应的倒退时间还得去考虑何时更新或者是废除Refresh Token,我们需要考虑并发的处理,防止同一个Refresh Token在同一时刻被多次刷新Access Token,目的就是为了防止我们的攻击行为,那么当用户进行系统退出的时候,注销的不光是Access Token还得将Refresh Token也进行一个一统删除,确保用户在进行后续操作的时候无法在获得最新的一个授权,那么对于访问的限制,Refresh Token相关接口应该收到一个严格的控制,仅限于可性的客户端才能进行对应的访问处理