知识卡片

JWT令牌免去资源服务器的网络往返

专业/工作 · 526.c.1

内容

[[令牌接力传递用户授权上下文]]里边缘服务转发给下游的访问令牌,OAuth2 协议本身不规定它必须是什么格式,实践中主要有两种选择:不透明令牌本身不携带任何信息,资源服务器每次收到请求都要拿着令牌回头去问身份提供者”这个令牌对应的是谁、有什么权限”;JWT 格式的令牌把用户身份和权限这些声明直接编码进令牌本身,资源服务器只需要用身份提供者公开的公钥验证一下签名没被篡改,就能直接从令牌里读出所有需要的信息,完全不用再发一次网络请求去确认。这个差异直接决定了两种方案的性能特征——不透明令牌牺牲性能换取”权限变更能立刻生效”(服务端一撤销权限,下一次校验立刻感知到),JWT 用一次性获取公钥换来后续每次校验都不用联网,代价是令牌签发之后中途撤销权限不会立刻反映在已经签出去的令牌里,只能等令牌自然过期。发散:这是”信息内嵌”和”信息按需查询”这条设计轴线的又一次具体应用——JWT 选择把状态嵌进令牌本身、用短有效期换取”撤销延迟可接受”,不透明令牌选择把状态留在服务端、用实时查询换取”撤销立即生效”,没有免费的午餐,只是把代价挪到了不同的地方。

参考来源

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