我有一个关于使用JWT的SSO流程的简单问题
假设我们有单独的授权服务器,它将JWT提供给客户端应用程序/服务器和资源服务器,客户端尝试使用该令牌进行访问。
问题是,资源服务器是否应自行验证令牌(例如与Auth Server共享私有证书),还是应该请求Auth Server为每个客户端请求验证JWT?
答案 0 :(得分:3)
JWT specification的构建考虑了可扩展性。 JWT设计的目的是任何受信任的应用程序都可以验证签名块。如果您关心性能,请使用SHA-256 HMAC并使用共享密钥在每个端点上本地验证签名。对JWT使用非对称签名会产生开销,但是您可以将公钥存储在验证但不颁发JWT的端点上,然后将中心权限上的私钥存储在颁发令牌的私钥上。验证和发布之间的这种关注分离降低了对手可以破坏令牌创建过程的可能性(阅读:纵深防御)。
如果您需要实时撤销令牌,则需要一个验证每个令牌的中央权限。这样做有效,但是它违背了JWT设计的目的,系统最好只发出一个cryptogrpahic nonce作为令牌。