平台奖励创作,可能会升级VIP文章,可以移步我的公众号:【编程朝花夕拾】,且可获取首发内容。
01 引言
登录功能是我们常见的功能,无论是Web应用还是移动设备,用户的认证和授权是确保应用安全性的重要环节。单token
机制但从应用的角度已经完全可以满足功能的完成,但是从安全性角度考虑的话,还是有安全隐患的。
登录后访问资源需要携带token
作为登录凭证,因为每次请求都会携带token
,一旦被他人截获,就会就当前的用户的所有资源信息泄露。设置token
的有效期,可以提高应用的安全性。有效期过短,系统的可用性就会降低,需要用户不断登录;有效期过长,一旦被截获,容易泄露数据。这就需要设计者在安全性和可用性上权衡。
小孩子才做选择,成年人可不可以都要。当然可以。双token
机制闪亮登场,满足我们既要还要的需求。下来我们一起了解一下双token
机制。
02 什么是双Token机制
双token
机制是通过两个token
分工合作,一长一短,功能各不相同,相互配合完成身份验证的机制。
访问令牌(access_token):
该令牌是一个短令牌,主要用于访问受保护的资源,也就是登录之后才能访问的资源。短令牌不仅有效期短,长度也会相对较短。短的有效期保证安全性,短的长度节约了传输资源。每次访问受到保护的资源都需要携带。
刷新令牌(refresh_token):
该令牌是一个长令牌,主要是在访问令牌过期后,携带次令牌获取新的访问令牌和刷新令牌,客户端使用新的访问令牌继续访问,无需重新登录。原则上只能使用一次,不会频繁的在网络上传输,降低了被窃取的风险。长令牌不仅有效期相对长,长度也会相对较长,增加记忆的难度,这也是安全性的考虑。刷新令牌一旦过期,用户就需要重新登录。
微信的登录授权的流程就是使用了双token
机制:微信授权接口文档
03 工作机制流程
主要分为两个阶段:获取令牌和刷新令牌
获取令牌阶段:
用户登录,服务端验证用户信息,验证通过之后,签发access_token
和refresh_token
,设置有效期,并返回给客户端。
刷新令牌阶段:
用户访问受保护的资源,服务端校验access_token
过期,返回给客户端,客户端发起刷新令牌的请求,服务端再次验证refresh_token
。若过期,则让客户端重新登录,若没过期,则重新签发access_token
和refresh_token
,设置有效期,并返回给客户端。
04 如何保证安全性
双token
机制弥补了单token
的不足,它是如何保证安全的呢?
- 短有效期的
access_token
,因为频繁的传输,被窃取的可能就会变高,所以设置较短的有效期,即便被窃取了,也不会造成严重的损失。 - 长有效期的
refresh_token
,只有在短token
过期的时候才会被传输,所以减少了被窃取的可能性。而长token
本身也有有效期,服务器端也会验证长token
的有效性。长token
只能使用一次,用完即失效,同样增加了安全性。 - 在用户退出登录、修改密码、挂失等操作下,可以对
refresh_token
进行撤销操作,防止被恶意使用。
05 小结
双token
机制的功能已经介绍完了,你们平时在开发登录的时候,会选用怎样的方式呢?有没有一个token
走天下呢?