4.10.5. OAuth 2.0 客户端身份验证流
在本节中,我们在 Kafka 会话启动过程中解释和视觉化 Kafka 客户端、Kafka 代理和授权服务器之间的通信流。流程取决于客户端和服务器配置。
当 Kafka 客户端将访问令牌作为凭证发送到 Kafka 代理时,需要验证令牌。
根据所使用的授权服务器以及可用的配置选项,您可能更愿意使用:
- 基于 JWT 签名检查和本地令牌内省的快速本地令牌验证,而不联系授权服务器
- 授权服务器提供的 OAuth 2.0 内省端点
使用快速本地令牌验证需要授权服务器提供 JWKS 端点以及用于验证令牌签名的公共证书。
另一种选择是在授权服务器上使用 OAuth 2.0 内省端点。每次建立新的 Kafka 代理连接时,代理会将从客户端收到的访问令牌传递给授权服务器,并检查响应以确认令牌是否有效。
还可以为以下项配置 Kafka 客户端凭证:
- 使用之前生成的长期访问令牌直接进行本地访问
- 与授权服务器联系以获取要发布的新访问令牌
授权服务器可能只允许使用不透明访问令牌,这意味着无法进行本地令牌验证。
4.10.5.1. 客户端身份验证流示例
您可以在 Kafka 会话验证过程中看到用于不同配置的 Kafka 客户端和代理的通信流。
使用客户端 ID 和 secret 的客户端,代理将验证委派给授权服务器
- Kafka 客户端使用客户端 ID 和机密从授权服务器请求访问令牌,以及可选的刷新令牌。
- 授权服务器生成新的访问令牌。
- Kafka 客户端使用 SASL OAUTHBEARER 机制与 Kafka 代理进行身份验证来传递访问令牌。
- Kafka 代理使用自己的客户端 ID 和 secret,在授权服务器上调用令牌内省端点来验证访问令牌。
- 如果令牌有效,则创建 Kafka 客户端会话。
使用客户端 ID 和 secret 的客户端,代理执行快速本地令牌验证
- Kafka 客户端从令牌端点通过授权服务器进行身份验证,使用客户端 ID 和 secret 以及可选的刷新令牌进行身份验证。
- 授权服务器生成新的访问令牌。
- Kafka 客户端使用 SASL OAUTHBEARER 机制与 Kafka 代理进行身份验证来传递访问令牌。
- Kafka 代理使用 JWT 令牌签名检查和本地令牌内省在本地验证访问令牌。
使用长期访问令牌的客户端,并将代理委派验证到授权服务器
- Kafka 客户端使用 SASL OAUTHBEARER 机制与 Kafka 代理进行身份验证,以传递长期访问令牌。
- Kafka 代理使用自己的客户端 ID 和 secret,在授权服务器上调用令牌内省端点来验证访问令牌。
- 如果令牌有效,则创建 Kafka 客户端会话。
使用长期访问令牌的客户端,代理执行快速本地验证
- Kafka 客户端使用 SASL OAUTHBEARER 机制与 Kafka 代理进行身份验证,以传递长期访问令牌。
- Kafka 代理使用 JWT 令牌签名检查和本地令牌内省在本地验证访问令牌。
快速本地 JWT 令牌签名验证仅适用于短期的令牌,因为如果令牌被撤销,则不会与授权服务器检查。令牌到期将写入令牌中,但取消可以在任何时间发生,因此在不联系授权服务器的情况下无法考虑该令牌。任何发布的令牌都将被视为有效,直到该令牌过期为止。