c端认证服务
- 协议
oauth协议查询用户是否存在
oids协议查询用户拥有的权限缓存到自包含的jwt对象
- jwt对象
由客户端本地持有缓存,大大减轻了服务端的压力
访问令牌,过期时间短30min
刷新令牌,过期时间长7天
访问令牌过期不用跳转登陆页面,自动由刷新令牌申请新的访问令牌
其他业务微服务如何验证jwt对象
使用与认证服务相同的公钥对jwt对象的payload部分重新计算签名
然后对比签名是否与jwt对象的签名部分一致
认证服务签发jwt对象时,将客户端指纹比如设备id嵌入到payload部分,同理其他微服务验证时从payload部分提取客户指纹验证是否一致
- jwt对象为什么由客户端本地持有
- 减轻服务端查询压力,想象一下如果未缓存,每一个用户请求都需要进行鉴权
- 由于jwt对象自包含,认证服务签发一个jwt后,其他业务微服务都可以直接对jwt对象进行密码学验证后即可使用,无需访问认证服务实现了解藕,从而实现了【单点登陆】功能
- jwt在客户端存储所以服务端无状态,方便横向扩展,不存在需要对权限对象进行复制的问题
- 风险
一致性问题:jwt对象何时更新
-》 设置较短的过期时间
将某个签发但未过期的token加入黑名单过滤