Docs 菜单
Docs 主页
/ / /
C#/.NET
/ /

OIDC(工作负载联合身份)

在此页面上

  • Overview
  • 代码占位符
  • 在应用程序中使用 OIDC 身份验证
  • Azure IMDS
  • GCP IMDS
  • 自定义回调
  • API 文档

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

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

提示

OIDC 身份验证

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

有关在MongoDB中使用 OIDC身份验证的更多信息,请参阅MongoDB Server手册中的 OpenID Connect 身份验证和MongoDB Server参数。

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

  • +srv:仅当您连接到MongoDB Atlas 群集时,才在连接字符串前缀中包含此选项。要学习;了解有关+srv 选项的更多信息,请参阅MongoDB Server手册中的连接字符串格式。

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

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

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

  • <audience>:在MongoDB 部署上配置的受众参数。

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

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

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

您可以使用 MongoCredential对象或作为连接字符串的一部分,对 MongoClientSettings对象指定Azure IMDS OIDC身份验证。选择 Connection StringMongoCredential标签页,查看相应的语法。

注意

不能将包含逗号 (,) 字符的值传递给 authMechanismProperties连接字符串参数。您必须在 MongoCredential对象中指定包含逗号的值,如 MongoCredential标签页中所示。

以下代码示例演示如何指定Azure IMDS OIDC身份验证。 将<percent-encoded audience>占位符替换为MongoDB 部署上配置的audience参数的百分比编码值。

var connectionString = "mongodb://<username>@<hostname>[:<port>]/?" +
"authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");
var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString);
var client = new MongoClient(mongoClientSettings);

以下代码示例显示如何指定Azure IMDS OIDC身份验证:

var mongoClientSettings = MongoClientSettings.FromConnectionString(
"mongodb://<hostname>[:<port>]");
mongoClientSettings.Credential = MongoCredential
.CreateOidcCredential("azure", "<username>")
.WithMechanismProperty("TOKEN_RESOURCE", "<audience>");
var client = new MongoClient(mongoClientSettings);

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

您可以使用GCP MongoClientSettingsMongoCredential对象或作为连接 的一部分在 对象上指定 IMDS OIDC身份验证。string选择Connection StringMongoCredential标签页,查看相应的语法。

注意

不能将包含逗号 (,) 字符的值传递给 authMechanismProperties连接字符串参数。您必须在 MongoCredential对象中指定包含逗号的值,如 MongoCredential标签页中所示。

以下代码示例展示如何指定GCP IMDS OIDC身份验证作为身份验证字符串的一部分:

var connectionString = "mongodb://<hostname>[:<port>]/?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>");
var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString);
var client = new MongoClient(mongoClientSettings);

以下代码示例展示如何使用 MongoCredential对象指定GCP IMDS OIDC身份验证:

var mongoClientSettings = MongoClientSettings.FromConnectionString(
"mongodb://<hostname>[:<port>]");
mongoClientSettings.Credential = MongoCredential
.CreateOidcCredential("gcp")
.WithMechanismProperty("TOKEN_RESOURCE", "<audience>");
var client = new MongoClient(mongoClientSettings);

.NET/ C#驱动程序并不为所有平台提供内置支持,包括Azure Functions 和Azure Kubernetes Service (AKS)。 相反,您必须定义自定义回调,才能使用 OIDC 从这些平台进行身份验证。

首先,定义一个实现 IOidcCallback 接口的类。该接口包含两个方法:

  • GetOidcAccessToken():此方法接受回调方法的参数并返回回调响应。

  • GetOidcAccessTokenAsync():此方法是上一方法的异步版本。

以下代码是 IOidcCallback 接口的示例实现。在此示例中,这些方法从本地文件系统中名为 "access-token.dat" 的文件检索 OIDC 令牌。

public class MyCallback : IOidcCallback
{
public OidcAccessToken GetOidcAccessToken(
OidcCallbackParameters parameters,
CancellationToken cancellationToken)
{
var accessToken = File.ReadAllText("access-token.dat");
return new(accessToken, expiresIn: null);
}
public async Task<OidcAccessToken> GetOidcAccessTokenAsync(
OidcCallbackParameters parameters,
CancellationToken cancellationToken)
{
var accessToken = await File.ReadAllTextAsync(
"access-token.dat",
cancellationToken)
.ConfigureAwait(false);
return new(accessToken, expiresIn: null);
}
}

定义包含自定义回调方法的类后,调用MongoCredential.CreateOidcCredential()方法并传入该类的新实例。 将此方法调用的结果存储在MongoClientSettings对象的Credential属性中,如以下代码示例:

var mongoClientSettings = MongoClientSettings
.FromConnectionString("mongodb://<hostname>[:<port>]");
mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new MyCallback());
var client = new MongoClient(mongoClientSettings);

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

后退

AWS IAM