Cookie/会话/令牌 仍有困惑?-令牌程序
最编程
2024-04-01 09:32:52
...
Token是令牌的意思,由服务端生成并发放给客户端,是一种具有时效性的验证身份的手段。
Token避免了Session机制带来的海量信息存储问题,也避免了Cookie机制的一些安全性问题,在现代移动互联网场景、跨域访问等场景有广泛的用途。
4.1 简单的交互流程
-
客户端将用户的账号和密码提交给服务器 -
服务器对其进行校验,通过则生成一个token值返回给客户端,作为后续的请求交互身份令牌 -
客户端拿到服务端返回的token值后,可将其保存在本地,以后每次请求服务器时都携带该token,提交给服务器进行身份校验 -
服务器接收到请求后,解析关键信息,再根据相同的加密算法、密钥、用户参数生成sign与客户端的sign进行对比,一致则通过,否则拒绝服务 -
验证通过之后,服务端就可以根据该Token中的uid获取对应的用户信息,进行业务请求的响应
4.2 Token的设计思想
以JSON Web Token(JWT)为例,Token主要由3部分组成:
-
Header头部信息
记录了使用的加密算法信息 -
Payload 净荷信息
记录了用户信息和过期时间等 -
Signature 签名信息
根据header中的加密算法和payload中的用户信息以及密钥key来生成,是服务端验证服务端的重要依据
header和payload的信息不做加密,只做一般的base64编码,服务端收到token后剥离出header和payload获取算法、用户、过期时间等信息,然后根据自己的加密密钥来生成sign,并与客户端传来的sign进行一致性对比,来确定客户端的身份合法性。
这样就实现了用CPU加解密的时间换取存储空间,同时服务端密钥的重要性就显而易见,一旦泄露整个机制就崩塌了,这个时候就需要考虑HTTPS了。
4.3 Token方案的特点
-
Token可以跨站共享,实现单点登录 -
Token机制无需太多存储空间,Token包含了用户的信息,只需在客户端存储状态信息即可,对于服务端的扩展性很好 -
Token机制的安全性依赖于服务端加密算法和密钥的安全性 -
Token机制也不是万金油