知识卡片

令牌接力传递用户授权上下文

专业/工作 · 526.c

内容

用户登录成功后,身份提供者其实签发了两种不同用途的[[JWT的三段结构与信任前提|令牌]]:ID 令牌代表”认证这件事发生过”,携带用户身份信息,只在边缘服务内部使用来建立会话;访问令牌代表”边缘服务被授权可以代表这个用户访问下游服务”,边缘服务自己不解析访问令牌的内容(它不是访问令牌的目标受众),只是原封不动地把它塞进请求头转发给下游——这个模式叫令牌接力。下游服务(资源服务器)收到请求后自己校验令牌签名、解析里面的声明来判断这次调用能不能通过。发散:这个设计把”谁能解读令牌内容”和”谁能转发令牌”分得很清楚——边缘服务只是令牌的搬运工,不需要也不应该假设自己理解令牌里装的是什么,这样下游服务想改变令牌里携带的信息结构时,完全不需要边缘服务的转发逻辑跟着改,两者只在”这是一串不透明的字符串”这个层面上耦合。

参考来源

《Cloud Native Spring in Action》第12章《Security: Authorization and auditing》