OIDC 签名验证

OIDC signature verification

我们正在与商业客户一起测试我们自己的 OIDC-IDP。 (我们无权访问客户端代码。)经过一些测试,客户端总是 returns

OpenID Connect token validation failed: Token signature invalid (ID_TOKEN)

IDP 在网络的荒野中,客户端在我们自己的网络中,中间有一个 SSL 断路器。我们有一个测试客户端,也在 WWW 中,工作正常。

我的问题是,OIDC 客户端使用哪个证书来验证签名。是IDP网站的证书吗?如果是这样,可能是这个错误的原因,是 ssl-breaker 替换了原始证书吗?

关于 OIDC 行话的注意事项

  • OpenId Provider (OP) 类似于 SAML2 IdP
  • 依赖方 (RP) 类似于 SAML2 SP

我知道你在写 "IdP" 和 "client" 时指的是什么,但我想提一下,你通常会看到 OP 和 RP 用于 OIDC 文档/讨论。

背景和建议

您正在测试的商业 RP 声明 ID 令牌(即 JWT)的签名验证失败。要具体回答你的问题,不,它是 而不是 使用来自 OP 网站的 x509 证书来验证签名。 RP 用于验证签名的密钥将取决于您是否已将 OP 配置为使用以下方式签署 ID 令牌:

  • HS256(对称密钥算法);或
  • RS256(非对称密钥算法)

请查看此线程上已接受的答案以了解上下文:

在前一种情况 (HS256) 中,您的 OP 使用密钥对 ID Token 进行签名。并且您的 RP 必须使用相同的密钥验证签名。 (注意:您可能知道,保持此共享密钥的安全很重要。)如果这是您的环境,也许商业 RP 有一个配置选项,允许您在密钥中上传或 copy/paste .

在后一种情况 (RS256) 中,您的 OP 使用私钥对 ID 令牌进行签名,但您的 RP 使用其 public 密钥副本验证签名。如果这是你的环境,也许商业 RP 有一个配置选项来指定 "jwks_uri" 和 "kid"。这些分别指的是您的 public 密钥发布到的 URI 及其密钥 ID。