OAuth 2.0 服务器如何知道在客户端身份验证期间应该使用哪个秘密来解析 jwt 令牌? (client_secret_jwt)

How does OAuth 2.0 Server know which secret should use to parse jwt token during client authentication? (client_secret_jwt)

我的任务是在我的身份提供程序中使用 JWT 添加对客户端身份验证的支持 (a.k.a client_secret_jwt) (https://datatracker.ietf.org/doc/html/rfc7523#section-2.2)。

我偶然发现了 jwt 解析。

我看到客户端身份验证流程 (client_secret_jwt) 是这样的:

客户端在IDP中通过注册,获得client_id和client_secret。然后它尝试对其用户进行身份验证并向“oauth2/token”端点发送一个请求,其中包含两个键值对的负载:client_assertion_type (它是一个常量)和 client_assertionclient_assertion是一个包含客户端信息的jwt令牌。客户端使用 client_secret 生成 jwt 令牌。

所以客户端发送请求,idp 服务器必须处理那个请求,它从请求中检索 jwt 令牌,现在它必须使用 secret 进行解析,但是它应该使用哪个 client_secret?此时它对客户端一无所知(因为请求不包含 client_id),因此它无法访问其数据库并获取该客户端的特定秘密?

您能否提供有关下一个问题的一些信息:

  1. 规范中确实没有包含有关该问题的信息,对吗?
  2. 这是否意味着如果 Oauth 规范没有说明这个问题,我应该自己解决这个问题?
  3. 如果我必须自己解决这个问题,您如何看待遍历 idp 的所有客户端秘密以寻找合适的秘密的解决方案?

提前谢谢你。

您问题的答案在您引用的规范的 https://datatracker.ietf.org/doc/html/rfc7523#section-3 中:当客户端使用 JWT 进行客户端身份验证时,它必须在 sub JWT 断言的声明。

B. For client authentication, the subject MUST be the "client_id" of the OAuth client.