如何在不访问身份验证服务器的情况下验证 OAuth2 访问令牌 (JWT)

Posted

技术标签:

【中文标题】如何在不访问身份验证服务器的情况下验证 OAuth2 访问令牌 (JWT)【英文标题】:How to validate an OAuth2 access token (JWT) without accessing the auth server 【发布时间】:2018-02-23 02:00:08 【问题描述】:

试图了解 OAuth2 中的 2-legged 客户端凭据方案。有人说 JWT 是访问令牌的绝佳格式,因为它是自包含的,资源服务器不需要验证来自授权服务器 (STS) 的令牌。但是这是怎么做到的呢?我看到资源服务器本身可以验证 JWT 的唯一方法是在服务器上存储一个用于验证签名的公钥。

【问题讨论】:

【参考方案1】:

当使用 JWT 作为访问令牌时,资源服务器不需要调用授权服务器来验证它。实际上,资源服务器需要存储授权服务器的公钥才能这样做。获取该公钥是一个带外过程。

JWT 的验证包括检查签名以及对嵌入在令牌中的声明的一些额外检查,例如时间戳iatexpnbf)和标识符(aud)。

与其他形式的签名数据/令牌相比,JWT 的优势在于 JWTS 是标准化且灵活的 wrt。他们使用的密码学使得可以使用标准库来创建/验证它们,而不必编写自定义代码。

【讨论】:

当然。我只是想澄清一下你是否真的回答了我的问题:) 所以你的意思是 1)在资源服务器上使用公钥的情况下 JWT 是自包含的?所以这里不涉及其他“魔法”,JWT 令牌内容是通过公钥验证的。 2)为什么这只对JWT特别?您也可以在任何其他情况下使用公钥... 添加了一些关于这些主题的文字

以上是关于如何在不访问身份验证服务器的情况下验证 OAuth2 访问令牌 (JWT)的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用库的情况下验证本机 Javascript 中的 Azure OAuth 访问 JWT 令牌?

如何在不使用身份验证的情况下保护 RESTful Web 服务

如何在没有手动浏览器身份验证的情况下从 Meteor.js 应用程序对 GMail-api 进行 oauth (2) 身份验证?

尝试通过 oauth 进行身份验证时访问被拒绝

如何在不经过注册用户身份验证的情况下保护公共API请求

是否可以在不重定向到外部登录页面的情况下进行 SPA 身份验证