Docs 菜单
Docs 主页
/ /

OIDC(工作负载联合身份)

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

只有在对MongoDB Atlas或MongoDB Enterprise Advanced进行身份验证时,并且只能在对MongoDB v7.0 或更高版本进行身份验证时,才能使用此机制。

提示

OIDC 身份验证

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

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

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

  • <db_username>:要进行身份验证的用户的MongoDB用户名。

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

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

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

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

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

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

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

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

  • authMechanism:设置为MONGODB-OIDC

  • authMechanismProperties:设置为ENVIRONMENT:azure

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

逗号 (,) 字符及其编码 (%2C) 被保留,在值中使用这些字符会导致驱动程序将逗号解释为键值对的分隔符。您必须在 MongoCredential实例中指定包含逗号的值,如 MongoCredential标签页中所示。

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

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

MongoCredential credential = MongoCredential.createOidcCredential("<db_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 虚拟机上运行,或以其他方式使用GCP实例元数据服务,则可以使用Java驱动程序的内置GCP支持对MongoDB进行身份验证。

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

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

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

  • authMechanism:设置为MONGODB-OIDC

  • authMechanismProperties:设置为ENVIRONMENT:gcp

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

逗号 (,) 字符及其编码 (%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(null)
.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驱动程序的内置Kubernetes支持对MongoDB进行身份验证。

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

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

  • authMechanism:设置为MONGODB-OIDC

  • authMechanismProperties:设置为ENVIRONMENT:k8s

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

hostnameport 替换为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 驱动程序并不为所有平台提供内置支持,包括 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文档:

后退

AWS IAM

在此页面上