Overview
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 身份验证
以下部分介绍如何使用 OIDC身份验证从各种平台进行身份验证。
Azure IMDS
如果应用程序在 Azure VM 上运行,或以其他方式使用 Azure 实例元数据服务 (IMDS),则可以使用 Java 驱动程序的内置 Azure 支持对 MongoDB 进行身份验证。
您可以使用Azure MongoCredential
或作为连接 的一部分来指定 IMDS OIDC身份验证。string
从 Connection String 或 MongoCredential 标签页中进行选择,以查看相应的语法:
要将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());
GCP IMDS
如果您的应用程序在 Google Compute Engine 虚拟机上运行,或以其他方式使用GCP实例元数据服务,则可以使用Java驱动程序的内置GCP支持对MongoDB进行身份验证。
您可以使用GCP MongoCredential
或作为连接 的一部分来指定 IMDS OIDC身份验证。string
从 Connection String 或 MongoCredential 标签页中进行选择,查看相应的语法:
要将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
如果您的应用程序在Kubernetes集群上运行,则可以使用Java驱动程序的内置Kubernetes支持对MongoDB进行身份验证。
从Connection String或MongoCredential标签页中进行选择,以查看相应的语法。
要将Kubernetes OIDC 指定为身份验证机制,请在连接字符串中设立以下选项:
authMechanism
:设置为MONGODB-OIDC
。authMechanismProperties
:设置为ENVIRONMENT:k8s
。
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 令牌的内容:
AZURE_FEDERATED_TOKEN_FILE
在Azure Kubernetes Service (AKS) 上运行的应用程序的环境变量AWS_WEB_IDENTITY_TOKEN_FILE
在Elastic Kubernetes Service (EKS)上运行的应用程序的环境变量/var/run/secrets/kubernetes.io/serviceaccount/token
文件,所有其他应用程序的默认位置,包括在 Google Kubernetes Engine (GKE) 上运行的应用程序
您必须将 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
作为参数并返回 OidcCallbackResult
的 OidcCallback
函数式接口的其他实现。
以下示例使用示例回调从本地文件系统中名为"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 文档
要学习;了解有关本页讨论的任何方法或类型的更多信息,请参阅以下API文档: