Overview
OpenID Connect (OIDC)身份验证机制允许您使用第三方身份提供商(例如Azure或Google Cloud Platform (GCP ))向MongoDB进行身份验证。
只有在对MongoDB Atlas或MongoDB Enterprise Advanced进行身份验证时,并且只能在对MongoDB v7.0 或更高版本进行身份验证时,才能使用此机制。
重要
MONGODB-OIDC
身份验证机制要求在Linux平台上运行MongoDB Server v7.0 或更高版本。
指定 OIDC 身份验证
以下部分介绍如何使用 OIDC身份验证从不同平台进行身份验证。代码示例使用以下占位符:
<OIDC principal>
:如果根据Azure IMDS 进行身份验证,则为Azure托管标识或企业应用程序的客户端ID或应用程序 ID 。<hostname>
: MongoDB 部署的网络解决。<port>
: MongoDB 部署的端口号。 如果省略此参数,驾驶员将使用默认端口号 (27017
)。 连接MongoDB Atlas 群集时无需指定端口。
Azure IMDS
如果应用程序在Azure VM 上运行,或以其他方式使用Azure实例元数据服务 (IMDS),则可以使用Kotlin Sync驱动程序的内置Azure支持向MongoDB进行身份验证。
您可以通过使用 实例或在连接 中指定您的凭证来指定 AzureIMDS OIDC身份验证。MongoCredential
string
从 Connection String 或 MongoCredential 标签页中进行选择,以查看相应的语法。
将以下代码中的<percent-encoded audience>
占位符替换为MongoDB 部署上配置的受众服务器参数的百分比编码值。
逗号 ( ,
) 字符及其编码 ( %2C
) 被保留,在值中使用这些字符会导致驾驶员将逗号解释为键值对的分隔符。 您必须在MongoCredential
实例中指定包含逗号的值,如MongoCredential标签页中所示。
val connectionString = ConnectionString( "mongodb://<OIDC principal>@<hostname>:<port>/?" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>") val mongoClient = MongoClient.create(connectionString)
将<audience>
占位符替换为MongoDB 部署上配置的audience
服务器参数的值。
val credential = MongoCredential.createOidcCredential("<OIDC principal>") .withMechanismProperty("ENVIRONMENT", "azure") .withMechanismProperty("TOKEN_RESOURCE", "<audience>") val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build())
GCP IMDS
如果您的应用程序在 Google Compute Engine 虚拟机上运行,或以其他方式使用GCP实例元数据服务,则可以使用Kotlin Sync驱动程序的内置GCP支持向MongoDB进行身份验证。
您可以通过使用GCP MongoCredential
实例或在连接 中指定您的档案来指定 IMDS OIDC凭证身份验证。string
从Connection String或MongoCredential标签页中进行选择,以查看相应的语法。
将以下代码中的<percent-encoded audience>
占位符替换为MongoDB 部署上配置的受众服务器参数的百分比编码值。
逗号 ( ,
) 字符及其编码 ( %2C
) 被保留,在值中使用这些字符会导致驾驶员将逗号解释为键值对的分隔符。 您必须在MongoCredential
实例中指定包含逗号的值,如MongoCredential标签页中所示。
val connectionString = ConnectionString( "mongodb://<OIDC principal>@<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>") val mongoClient = MongoClient.create(connectionString)
将<audience>
占位符替换为MongoDB 部署上配置的audience
服务器参数的值。
val credential = MongoCredential.createOidcCredential("<OIDC principal>") .withMechanismProperty("ENVIRONMENT", "gcp") .withMechanismProperty("TOKEN_RESOURCE", "<audience>") val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build())
Kubernetes
如果您的应用程序在Kubernetes集群上运行,则可以使用Kotlin Sync驱动程序的内置Kubernetes支持向MongoDB进行身份验证。
从Connection String或MongoCredential标签页中进行选择,以查看相应的语法。
要将Kubernetes OIDC 指定为身份验证机制,请在连接字符串中设立以下选项:
authMechanism
:设置为MONGODB-OIDC
。authMechanismProperties
:设置为ENVIRONMENT:k8s
。
将以下代码中的<percent-encoded audience>
占位符替换为MongoDB 部署上配置的受众服务器参数的百分比编码值。
val connectionString = ConnectionString( "mongodb://<OIDC principal>@<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s,TOKEN_RESOURCE:<percent-encoded audience>") val mongoClient = MongoClient.create(connectionString)
将<audience>
占位符替换为MongoDB 部署上配置的audience
服务器参数的值。
val credential = MongoCredential.createOidcCredential("<OIDC principal>") .withMechanismProperty("ENVIRONMENT", "k8s") .withMechanismProperty("TOKEN_RESOURCE", "<audience>") val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build())
自定义回调
Kotlin Sync驾驶员并不为所有平台提供内置支持,包括Azure Functions 和Azure Kubernetes Service (AKS)。 相反,您必须定义自定义回调,才能使用 OIDC 从这些平台进行身份验证。 为此,请使用 "OIDC_CALLBACK"
身份身份验证属性,如以下代码示例所示:
val credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK") { context: Context -> val accessToken = "..." OidcCallbackResult(accessToken) }
"OIDC_CALLBACK"
属性的值必须是Lambda或接受 OidcCallbackContext
作为参数并返回 OidcCallbackResult
的 OidcCallback
函数式接口的其他实现。
以下示例使用示例回调从本地文件系统中名为 "access-token.dat"
的文件中检索OIDC 令牌:
val credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK") { context: Context -> val accessToken = String(Files.readAllBytes(Paths.get("access-token.dat"))) OidcCallbackResult(accessToken) } val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build() )
更多信息
要学习;了解有关向MongoDB进行身份验证的更多信息,请参阅MongoDB Server手册中的身份验证。
要学习;了解有关使用Kotlin Sync驾驶员创建 MongoClient
对象的详情,请参阅 Create a MongoClient指南。
API 文档
要进一步学习;了解使用Kotlin Sync驾驶员对应用程序进行身份验证的类和方法,请参阅以下API文档: