Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
Kotlin Sync 驱动程序
/ /

OIDC 身份验证

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 身份验证

有关 MONGODB-OIDC身份验证机制的更多信息,请参阅MongoDB Server手册中的 OpenID Connect 身份验证MongoDB Server参数

以下部分介绍如何使用 OIDC身份验证从不同平台进行身份验证。代码示例使用以下占位符:

  • <OIDC principal>:如果根据Azure IMDS 进行身份验证,则为Azure托管标识或企业应用程序的客户端ID或应用程序 ID 。

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

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

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

您可以通过使用 实例或在连接 中指定您的凭证来指定 AzureIMDS OIDC身份验证。MongoCredentialstring

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

将以下代码中的<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())

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

您可以通过使用GCP MongoCredential实例或在连接 中指定您的档案来指定 IMDS OIDC凭证身份验证。string

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

将以下代码中的<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())

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 作为参数并返回 OidcCallbackResultOidcCallback 函数式接口的其他实现。

以下示例使用示例回调从本地文件系统中名为 "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指南。

要进一步学习;了解使用Kotlin Sync驾驶员对应用程序进行身份验证的类和方法,请参阅以下API文档:

后退

AWS IAM

在此页面上