可以共享未加密的 ID 令牌吗?

Is it OK to share unencrypted ID tokens?

假设我有两个服务器,A 和 B。用户代理只会连接到 A(和 OpenID 提供者,以便对 A 进行身份验证和授权)。对于信任 B 并仅通过 HTTPS 与 B 对话的 A,是否可以将其从 OpenID 提供商的令牌端点收到的(未加密的)ID 令牌传递给 B?

这样一来,A 就可以代表经过身份验证的用户调用 B 上的操作,如 ID 令牌所示。 B 应该能够验证用户确实经过身份验证可以与 A 一起工作(通过检查 ID 令牌的 aud 受众值,以及 ID 令牌的签名以确保它没有被篡改,例如 A).

这被认为是好的做法吗?或者这应该以其他方式完成?

此外,在这种情况下,A 是否应该在请求 ID 令牌时将 B 的 client-id 添加到 aud 列表中?看起来这就是它的好处,虽然我没有看到这一点 - 或者在实践中 OpenID 授权端点向最终用户显示观众(但肯定不是对最终用户没有任何意义的客户端 ID)得到他们的同意?

这听起来像是一个 OAuth 用例,其中用户将使用 OpenID Connect 登录到 RP A,但随后 A 使用作为 OpenID Connect 流程的一部分提供的访问令牌代表用户调用 B。

无需传递 ID 令牌和做一些尴尬的事情,例如共享 aud 标识符甚至客户端机密。 B 可以检查访问令牌以了解用户以及 A 是否具有适当的 "scope"(权限)来调用 B.

共享 ID 令牌不是好的做法,因为它们是针对特定接收者的。

通过在身份验证请求中包含额外的请求范围,OpenID Connect 流程中收到的访问令牌不仅可以与 userinfo 端点相关联。