对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

OIDC(工作负载联合身份)

OpenID Connect (OIDC)身份验证机制允许您使用第三方身份提供商(例如Azure或Google Cloud Platform (GCP ))向MongoDB进行身份验证。

重要

MONGODB-OIDC 身份验证机制要求在 Linux 平台上运行 MongoDB Server v 7.0或更高版本。

要学习;了解有关为 OIDC身份验证配置MongoDB Atlas 的更多信息,请参阅Atlas文档中的使用 OIDC 设置劳动力身份联合。

有关在MongoDB中使用 OIDC身份验证的更多信息,请参阅MongoDB Server手册中的使用 OIDC/OAuth2.0 oidcIdentityProviders 进行身份验证和授权。

本页上的代码示例使用以下占位符:

  • <username>: Azure托管标识或企业应用程序的客户端ID或应用程序 ID 。用于Azure IMDS身份验证。

  • <hostname>: MongoDB 部署的网络解决。

  • <port>: MongoDB 部署的端口号。如果省略此参数,驱动程序将使用默认端口号 (27017)。连接MongoDB Atlas 集群时无需端口号。

  • <audience><percent-encoded audience>:在MongoDB 部署上配置的 audience服务器参数的值。在连接字符串中指定该值时,请对该值进行百分比编码。

要使用代码示例,请将这些占位符替换为您自己的值。

以下部分介绍如何使用 OIDC 从各种平台进行身份验证。

如果应用程序在 Azure VM 上运行,或以其他方式使用 Azure 实例元数据服务 (IMDS),则可以使用 Java Reactive Streams 驱动程序的内置 Azure 支持对 MongoDB 进行身份验证。

您可以使用Azure MongoCredential或作为连接 的一部分来指定 IMDS OIDC身份验证。string

Connection StringMongoCredential 标签页中进行选择,查看相应的语法:

要将Azure IMDS OIDC 指定为身份验证机制,请在连接string中设立以下选项:

  • authMechanism:设置为MONGODB-OIDC

  • authMechanismProperties:设置为ENVIRONMENT:azure,TOKEN_RESOURCE:<url-encoded-resource>

<username> 占位符替换为Azure托管身份或企业应用程序的客户端ID或应用程序 ID 。将 <percent-encoded audience> 占位符替换为MongoDB 部署上配置的受众服务器参数的百分比编码值。

ENVIRONMENT设立为 azure 时,您必须提供URL编码的 TOKEN_RESOURCE 值。逗号 (,) 字符及其编码 (%2C) 被保留,在值中使用这些字符会导致驾驶员将逗号解释为键值对的分隔符。您必须在 MongoCredential实例中指定包含逗号的值,如 MongoCredential标签页中所示。

MongoClient mongoClient = MongoClients.create(
"mongodb://<username>@<hostname>:<port>/?" +
"?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");

<username>占位符替换为Azure托管身份或企业应用程序的客户端ID或应用程序 ID 。 将<audience>占位符替换为MongoDB 部署上配置的audience服务器参数的值。

MongoCredential credential = MongoCredential.createOidcCredential("<username>")
.withMechanismProperty("ENVIRONMENT", "azure")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

如果您的应用程序在 Google Compute Engine VM 上运行,或以其他方式使用GCP实例元数据服务,则可以使用Java Reactive Streams 驱动程序的内置GCP支持向MongoDB进行身份验证。

您可以使用GCP MongoCredential或作为连接 的一部分来指定 IMDS OIDC身份验证。string

Connection StringMongoCredential 标签页中进行选择,查看相应的语法:

要将GCP IMDS OIDC 指定为身份验证机制,请在连接string中设立以下选项:

  • authMechanism:设置为MONGODB-OIDC

  • authMechanismProperties:设置为ENVIRONMENT:gcp,TOKEN_RESOURCE:<url-encoded-resource>

<percent-encoded audience> 占位符替换为MongoDB 部署上配置的 audience服务器参数的百分比编码值。

ENVIRONMENT设立为 gcp 时,您必须提供URL编码的 TOKEN_RESOURCE 值。逗号 (,) 字符及其编码 (%2C) 被保留,在值中使用这些字符会导致驾驶员将逗号解释为键值对的分隔符。您必须在 MongoCredential实例中指定包含逗号的值,如 MongoCredential标签页中所示。

MongoClient mongoClient = MongoClients.create(
"mongodb://<hostname>:<port>/?" +
"authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>");

<audience>占位符替换为MongoDB 部署上配置的audience服务器参数的值。

MongoCredential credential = MongoCredential.createOidcCredential()
.withMechanismProperty("ENVIRONMENT", "gcp")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

如果应用程序在Kubernetes集群上运行,则可以使用Java Reactive Streams 驱动程序的内置Kubernetes支持向MongoDB进行身份验证。

Connection StringMongoCredential标签页中进行选择,以查看相应的语法。

要将Kubernetes OIDC 指定为身份验证机制,请在连接字符串中设立以下选项:

  • authMechanism:设置为MONGODB-OIDC

  • authMechanismProperties:设置为ENVIRONMENT:k8s

<hostname><port> 占位符替换为MongoDB 部署的网络解决和端口号。

MongoClient mongoClient = MongoClients.create(
"mongodb://<hostname>:<port>/" +
"?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:k8s");

<hostname><port> 占位符替换为MongoDB 部署的网络解决和端口号。

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("ENVIRONMENT", "k8s");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

如果您指定Kubernetes OIDC 作为身份验证机制,驱动程序将从以下位置之一读取 OIDC 令牌的内容:

您必须将 OIDC 令牌存储在与用于运行应用程序的服务相对应的位置。

Java Reactive Streams驱动程序并不为所有平台提供内置支持,包括Azure Functions 和Azure Kubernetes Service (AKS)。相反,您必须定义自定义回调,才能使用 OIDC 从这些平台进行身份验证。为此,请使用 "OIDC_CALLBACK" 身份身份验证属性,如以下代码示例所示:

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK", (context) -> {
String accessToken = ...
return new OidcCallbackResult(accessToken);
});

"OIDC_CALLBACK" 属性的值必须是Lambda或接受 OidcCallbackContext 作为参数并返回 OidcCallbackResultOidcCallback 函数式接口的其他实现。

以下示例从本地文件系统中名为 "access-token.dat" 的文件中检索 OIDC 令牌:

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK", (context) -> {
string accessToken = new String(Files.readAllBytes(Paths.get("access-token.dat"));
return new OidcCallbackResult(accessToken);
});
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

要学习;了解有关本页讨论的任何方法或类型的更多信息,请参阅以下API文档: