当前位置: 首页 > 知识库问答 >
问题:

使用JWKs Endpoint处理JWT令牌

唐增
2023-03-14

我收到两个jwt:一个OpenID连接ID令牌(ID\u令牌)和一个访问令牌(Access\u令牌)。OpenID的情况或多或少是清楚的-我可以使用JWKSendpoint验证它:https://smth.com/JWKS.

如例(https://bitbucket.org/b_c/jose4j/wiki/JWT例):

HttpsJwks httpsJkws = new HttpsJwks("https://smth.com/JWKS");
HttpsJwksVerificationKeyResolver httpsJwksKeyResolver = new HttpsJwksVerificationKeyResolver(httpsJkws);
jwtConsumer = new JwtConsumerBuilder()
    .setVerificationKeyResolver(httpsJwksKeyResolver)
    .setExpectedAudience(...)
    .setExpectedIssuer(...)
    .build();

问题是如何继续使用访问令牌。我可以从中提取userId和userDetails,但我想我还需要验证它?

如果我尝试验证与ID令牌相同的访问令牌,则会出现以下错误:

UnsolvableKeyException:找不到JWS的合适验证密钥,该JWS带有标头{“alg”:“RS256”,“kid”:“1”}

事实上,“kid”没有键:“1”,而且这个值“1”似乎有点奇怪?

我做错什么了吗?

共有1个答案

关翰
2023-03-14

听起来您正在实现OpenID连接客户端或依赖方的角色。这两个令牌,ID令牌和access令牌,用于不同的目的,应该由客户端进行不同的处理。ID令牌用于客户端,并支持在客户端对最终用户进行身份验证。在允许最终用户进入之前,客户端必须验证ID令牌(验证签名并验证exp和aud等声明)。然而,访问令牌是供客户端用来访问资源或API的,而不是直接供客户端使用或验证。访问令牌对客户端是不透明的,客户端不应该关心或知道它的详细信息。事实上,访问令牌并不总是JWT。在OpenID Connect中,访问令牌用于调用用户信息endpoint(使用HTTP头,Authorization:Bearer[access token]),以获取有关最终用户的更多声明/信息。

孩子的“1”值是完全合法的,但它指的是AS/OP和用户信息endpoint不知何故知道的密钥。它不是OpenID Connect JWKSendpoint处的密钥。“1”不是客户端需要知道的密钥,因为客户端不应该直接验证访问令牌。

 类似资料:
  • 我想获取JWT Access令牌用于Docuse,我尝试使用以下代码获取访问令牌,之后我通过访问令牌创建信封,我得到一个错误 “调用创建信封时出错: { ”错误代码“: ”AUTHORIZATION_INVALID_TOKEN“,”消息“:”提供的访问令牌已过期、已吊销或格式不正确。 我从这个链接DocuSign JWT访问令牌请求以上代码,在用户提到的工作代码,请告诉我我犯了什么错误,注意:我正

  • 我最近一直在思考同一个问题,想知道我的令牌解决方案是否有什么重大缺陷: 将过期时间设置为较低值(约15分钟) 每个生成的JWT也被添加到每个用户的“issuedTokens”集合/表中 在 JWT 验证期间,如果过期已过,将从服务器返回“过期”响应(例如,正文中带有“过期”的 401)。当客户端收到此状态时,它应该启动一个刷新过程,该过程将过期的令牌换成新的令牌。 服务器上的刷新endpoint应

  • 我正在用Django和angular构建一个应用程序。目前,我正在本地存储上存储后端发布的JWT。但是,我担心XSS攻击。我应该使用仅HTTP cookie存储令牌吗?我还考虑将令牌存储在auth服务类的变量字段中。但我不能完全确定angular是否在整个应用程序中共享该服务。我的身份验证服务是否只有一个实例?

  • 我正在使用单独的后端服务器在客户端移动应用程序中实现JWT,我正在寻找一种最佳方式来使用刷新令牌,而无需过多的服务器调用,同时保持良好的用户体验。 我对实现这样一种机制还很陌生,我对很多事情都感到困惑,所以我真正想要的是一个可靠的概念解决方案,以确保用户访问应用程序,并让他同时无限期登录。 任何更正或建议都将受到欢迎: > 为什么要刷新令牌? 单独使用JWT访问令牌可能会危及用户安全性:如果攻击者

  • 我们希望使用SpringOAuth2JWT令牌支持。我们的架构如下:Spring只提供了一个REST接口,前端由AngularJS构建,AngularJS查询Spring REST接口。出于授权目的,我们的前端团队希望使用JWT。因此,我查看了SpringOAuth2JWT支持,但仍然不知道如何与前端讨论JWT令牌。在阅读了一些教程后,我实现了以下内容: 我不确定工作流程如何。我猜:前端访问/oa

  • 问题内容: 我是使用PHP登录脚本的初学者。到目前为止,这是表单令牌语句: 在用户指示他/她想要登录后立即发出该声明。 我有限的理解是令牌的目的是在唯一的时间点识别唯一的用户并掩盖表单令牌信息。 然后,一切变得模糊。这是我的3个未解决问题: 为了安全起见,什么时候才是“检查”表单令牌的最佳时间? 我该如何检查? 什么时候(如果有的话)我“销毁”表单令牌?(IOW,表单令牌会在用户注销之前保持“活动