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

在给定JWT头的JWKS中选择键

强德厚
2023-03-14

在给定JWS(JWT)头的JWKS密钥存储中,是否有选择签名验证密钥的标准方法?

我的目标是实现OpenID连接ID令牌验证库,我尝试灵活地预测不同的配置,但如果密钥选择是特定于IdP的,我不确定这样做是否有意义。

我当前的算法遍历JWKS并过滤掉:

  1. 如果JWK有“使用”字段,如果“使用”不等于“sig”,则拒绝
  2. 如果JWK有“密钥操作”字段,如果“密钥操作”不包含“验证”,则拒绝该字段。
  3. 如果JWK有“alg”字段,如果它与JWS标头值不同,则拒绝该字段
  4. 如果JWS头有“kid”字段,如果JWK没有或有不同的值,则拒绝该字段(注意反向逻辑)
  5. 如果在这个阶段只剩下一个JWK,我就用那个。否则就是失败

这种做法“够标准”吗?

==编辑===

我发现OpenID Connect核心规范的第10.1节说:

使用RSA或ECDSA签名时,必须将JOSE Header的alg Header Parameter值设置为JSON Web算法[JWA]中定义的适当算法。用于签名内容的私钥必须与发送者在其JWK Set文档中发布的用于签名验证的公钥相关联。如果引用的JWK Set文档中有多个键,则必须在JOSE Header中提供子值。各个密钥的密钥使用必须支持签名。

JWK“使用”是强制性的,所以我可以安全地要求它是“签名”。

如果JWKS中有不止一个键,JWT“孩子”是强制性的。这表明(尽管是间接的)在这种情况下,JWT的“孩子”和“JWK”的孩子应该匹配。“孩子”不需要是唯一的,所以你仍然需要额外的规则。

共有2个答案

衡高寒
2023-03-14

我在我的项目中使用类似的方法。查看文件的方法selectKeyhttps://github.com/Spomky-Labs/jose/blob/master/src/Object/BaseJWKSet.php#L169

简言之,方法sort-she根据参数设置关键帧并返回第一个参数。

那铭
2023-03-14

这是一个可行的办法。在第五阶段,我会说。如果JWS中未传输任何kid,则可能会得到多个相同类型的有效密钥(步骤4)。您将循环这些密钥,并将它们一次一个地传递给验证函数,以确定是否有一个密钥成功,从而用于对消息进行签名。

 类似资料:
  • Im使用dgrijalva/jwt go 令牌(过期令牌): jwks: 在那里看到的大多数示例iv'e都使用'kid',并且不相关,因为我的令牌头没有它,它有'x5t'字段。。 我还必须注意一件事,我的签名似乎是base64编码的,而不是base64 url编码的(这几乎扰乱了解析方法的使用)。我试过使用jwt。Parse()我尝试过手动加密头和有效负载sha256,而不是RS256和base6

  • 问题内容: 目前,我正在使用此: 它将我重定向到选项值内的位置。但这不能按预期工作。..这意味着如果我单击select的第一个选项,则onChange操作不会运行。我正在考虑使用javascript,但我想您会收到一些更好的建议。因此,如果我单击每个选项将其重定向到它的值,该如何使其起作用? 问题答案: 因为已经选择了第一个选项,所以永远不会触发change事件。添加一个空值作为第一个值,并检查位

  • 我收到两个jwt:一个OpenID连接ID令牌(ID\u令牌)和一个访问令牌(Access\u令牌)。OpenID的情况或多或少是清楚的-我可以使用JWKSendpoint验证它:https://smth.com/JWKS. 如例(https://bitbucket.org/b_c/jose4j/wiki/JWT例): 问题是如何继续使用访问令牌。我可以从中提取userId和userDetails

  • 桌面视频 我想选择从给定时间间隔6个月的行。新的还是旧的 因此,如果查询时间为例如1446076800,则将选择比该时间早6个月或新6个月的所有行。 采用UNIX TIMESTAMP格式。 因此,如果一个视频是在2015年10月上传的,所有在2015年4月上传的视频和更新的视频都将被选中。从2015年10月到2016年4月的所有视频也将被选中。

  • 问题内容: 我试图在ID或类’B’的元素中选择类’A’的第一个元素。我尝试了> +和第一个子选择器的组合,因为它不是类元素’B’中的第一个元素。它起作用了,但是…我试图覆盖一些默认的CSS,并且我无法控制服务器端,似乎类’A’元素有时在不同的位置生成。这是一个例子: 有时,“ B”类的名称有所不同,“ A”之前的元素也有所不同。那么,有什么方法可以选择元素“ C”中首次出现的“ A”吗?因为“ C

  • 我是一个新生的QA,我在这里尝试编写一个Protractor脚本,从下拉列表中选择一个选项。我的下拉列表中有两个选项,我正在尝试从数字中选择它。 这是我正在使用的代码。 默认情况下,选项 2 在页面加载时处于选中状态。我需要的是从下拉列表中选择选项1。但是,我的代码不会这样做。 下面是选择选项的代码片段。 提前感谢:)