JWT 令牌 SSO 流程

sil*_*box 5 security single-sign-on jwt

我有一个关于 JWT 的 SSO 流程的简单问题

假设我们有单独的授权服务器,它为客户端应用程序/服务器和资源服务器提供 JWT,客户端尝试使用该令牌进行访问。

在此处输入图片说明

问题是,资源服务器应该自己验证令牌(例如,与身份验证服务器共享私有证书)还是应该请求身份验证服务器为每个客户端请求验证 JWT?

roo*_*ook 4

JWT 规范在构建时就考虑到了可扩展性。JWT 设计的目的是任何受信任的应用程序都可以验证签名块。如果您关心性能,请使用 SHA-256 HMAC 并使用共享密钥在每个端点上本地验证签名。对 JWT 使用非对称签名会产生开销,但您可以将公钥存储在验证但不颁发 JWT 的端点上,然后将私钥存储在颁发令牌的中央机构上。验证和发行之间的这种关注点分离减少了代币创建过程被对手破坏的可能性(阅读:深度防御)。

如果您需要实时撤销令牌,则需要一个中央机构来验证每个令牌。这是可行的,但它违背了 JWT 设计的目的,系统最好只发布一个加密随机数作为令牌。