4.10. 使用基于 OAuth 2.0 令牌的身份验证


AMQ Streams 支持使用 OAUTHBEARERPLAIN 机制的 OAuth 2.0 身份验证。

OAuth 2.0 支持应用之间基于令牌的标准化身份验证和授权,使用中央授权服务器发布对资源的有限访问权限的令牌。

Kafka 代理和客户端都需要配置为使用 OAuth 2.0。您可以配置 OAuth 2.0 身份验证,然后配置 OAuth 2.0 授权

注意

通过使用 OAuth 2.0 身份验证,应用程序客户端可以访问应用服务器(称为 资源服务器)上的资源,而无需公开帐户凭据。

应用客户端通过访问令牌来进行身份验证,应用服务器也可以使用该令牌来确定要授予的访问权限级别。授权服务器处理关于访问权限的访问和咨询。

在 AMQ Streams 中:

  • Kafka 代理充当 OAuth 2.0 资源服务器
  • Kafka 客户端充当 OAuth 2.0 应用程序客户端

Kafka 客户端向 Kafka 代理进行身份验证。代理和客户端根据需要与 OAuth 2.0 授权服务器通信,以获取或验证访问令牌。

对于 AMQ Streams 的部署,OAuth 2.0 集成提供:

  • 对 Kafka 代理的服务器端 OAuth 2.0 支持
  • 客户端 OAuth 2.0 支持 Kafka MirrorMaker、Kafka Connect 和 Kafka Bridge

RHEL 上的 AMQ Streams 包括两个 OAuth 2.0 库:

kafka-oauth-client
提供一个名为 io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler 的自定义登录回调处理程序类。要处理 OAUTHBEARER 身份验证机制,请使用由 Apache Kafka 提供的 OAuthBearerLoginModule 登录回调处理程序。
kafka-oauth-common
提供 kafka-oauth-client 库所需的一些功能的帮助程序库。

提供的客户端库还依赖于一些额外的第三方库,如 keycloak-corejackson-databindslf4j-api

我们建议使用 Maven 项目打包您的客户端,以确保包含所有依赖项库。依赖库可能会在以后的版本中有所变化。

为 Kafka 客户端 Java 库提供了一个 OAuth 回调处理程序,因此您不需要为 Java 客户端自行编写回调处理程序。应用客户端可以使用回调处理程序来提供访问令牌。以其他语言编写的客户端(如 Go)必须使用自定义代码连接到授权服务器并获取访问令牌。

其它资源

4.10.1. OAuth 2.0 身份验证机制

AMQ Streams 支持 OAUTHBEARER 和 PLAIN 机制进行 OAuth 2.0 身份验证。这两种机制都允许 Kafka 客户端通过 Kafka 代理建立经过身份验证的会话。客户端、授权服务器和 Kafka 代理之间的身份验证流程因每种机制而异。

建议您将客户端配置为尽可能使用 OAUTHBEARER。OAUTHBEARER 提供比 PLAIN 更高的安全级别,因为客户端凭证 永远不会 与 Kafka 代理共享。只考虑在不支持 OAUTHBEARER 的 Kafka 客户端中使用 PLAIN。

如有必要,可以在相同的 OAuth 身份验证监听器配置中同时启用 OAUTHBEARER 和 PLAIN。

OAUTHBEARER 概述

Kafka 支持 OAUTHBEARER 身份验证机制,但必须明确配置它。许多 Kafka 客户端工具在协议级别使用为 OAUTHBEARER 提供基本支持的库。

使用 OAUTHBEARER 时,客户端会启动与 Kafka 代理的会话进行凭证交换,其中凭证采用回调处理程序提供的 bearer 令牌的形式。通过使用回调,您可以通过以下三种方法之一配置令牌置备:

  • 客户端 ID 和 Secret(使用 OAuth 2.0 客户端凭证机制
  • 长期访问令牌,在配置时手动获得
  • 长期存在的刷新令牌,在配置时手动获取

要使用 OAUTHBEARER,您必须在 Kafka 代理的 OAuth 身份验证监听程序配置中将 sasl.enabled.mechanisms 设置为 OAUTHBEARER。有关详细配置,请参阅 第 4.10.2 节 “OAuth 2.0 Kafka 代理配置”

listener.name.client.sasl.enabled.mechanisms=OAUTHBEARER
注意

OAUTHBEARER 身份验证只能由支持协议级别的 OAUTHBEARER 机制的 Kafka 客户端使用。

PLAIN 概述

PLAIN 是所有 Kafka 客户端工具支持的简单身份验证机制,包括 kafkacat 等开发人员工具。为了启用 PLAIN 与 OAuth 2.0 身份验证一起使用,RHEL 上的 AMQ Streams 包括服务器端回调。PLAIN 的 AMQ 流实现被称为 OAuth 2.0 over PLAIN

对于 OAuth 2.0 over PLAIN,客户端凭证不会存储在 ZooKeeper 中。相反,它们在兼容授权服务器后面被集中处理,这与使用 OAUTHBEARER 身份验证时类似。

当与 OAuth 2.0 over PLAIN 回调搭配使用时,Kafka 客户端使用以下方法之一向 Kafka 代理进行身份验证:

  • 客户端 ID 和 secret(使用 OAuth 2.0 客户端凭证机制
  • 长期访问令牌,在配置时手动获得

客户端必须启用才能使用 PLAIN 身份验证,并提供 usernamepassword。如果密码前缀为 $accessToken:,后跟访问令牌的值,Kafka 代理会将密码解释为访问令牌。否则,Kafka 代理会将 username 解释为客户端 ID,password 解释为客户端 secret。

如果将 password 设置为访问令牌,username 必须设置为 Kafka 代理从访问令牌获取的相同主体名称。该进程取决于您如何使用 userNameClaimfallbackUserNameClaimfallbackUsernamePrefixuserInfoEndpointUri 配置用户名提取。它还取决于您的授权服务器;特别是,如何将客户端 ID 映射到帐户名称。

您可以在 Kafka 代理的 OAuth 验证监听程序配置中启用 PLAIN。为此,请在 sasl.enabled.mechanisms 的值中添加 PLAIN

listener.name.client.sasl.enabled.mechanisms=OAUTHBEARER,PLAIN

有关详细配置,请参阅 第 4.10.2 节 “OAuth 2.0 Kafka 代理配置”

4.10.1.1. 使用属性或变量配置 OAuth 2.0

您可以使用 Java 身份验证和授权服务(JAAS)属性或环境变量来配置 OAuth 2.0 设置。

  • JAAS 属性在 server.properties 配置文件中配置,并作为 listener.name.LISTENER-NAME.oauthbearer.sasl.jaas.config 属性的键值对传递。
  • 如果使用环境变量,您仍需要在 server.properties 文件中提供 listener.name.LISTENER-NAME.oauthbearer.sasl.jaas.config 属性,但您可以省略其他 JAAS 属性。

    您可以使用大写或大写的环境变量命名约定。

AMQ Streams OAuth 2.0 库使用开头的属性:

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.