文档菜单
文档首页
/ / /
C#/.NET
/ /

OIDC (工作负载身份联合)

本页内容

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

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

您只能在使用 MongoDB Atlas 或 MongoDB 企业高级版进行身份验证时使用此机制,并且只能在 MongoDB v7.0 或更高版本中进行身份验证。

提示

OIDC 身份验证

有关配置 MongoDB Atlas 以进行 OIDC 身份验证的更多信息,请参阅 Atlas 文档中的使用 OIDC 设置工作力身份联合

有关使用 MongoDB 进行 OIDC 身份验证的更多信息,请参阅 MongoDB 服务器手册中的OpenID Connect 身份验证MongoDB 服务器参数

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

  • +srv:如果您正在连接到MongoDB Atlas集群,则只在此连接字符串前缀中包含此选项。有关+srv选项的更多信息,请参阅MongoDB服务器手册中的连接字符串格式

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

  • <hostname>:您的MongoDB部署的网络地址。

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

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

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

以下部分描述了如何使用OIDC身份验证在各种平台上进行身份验证。

如果您的应用程序运行在Azure VM上,或者使用Azure实例元数据服务(IMDS),您可以使用.NET/C# 驱动的内置Azure支持通过身份验证访问MongoDB。

您可以在MongoClientSettings对象上指定Azure IMDS OIDC身份验证,无论是使用MongoCredential对象,还是作为连接字符串的一部分。选择连接字符串MongoCredential选项卡,查看相应的语法。

注意

您不能将包含逗号(,)字符的值传递给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 VM上,或者使用Google Cloud Platform实例元数据服务,您可以使用.NET/C# 驱动的内置GCP支持通过身份验证访问MongoDB。

您可以在MongoClientSettings对象上指定GCP IMDS OIDC身份验证,通过使用MongoCredential对象或将其作为连接字符串的一部分。选择“连接字符串”或“MongoCredential”选项卡,以查看相应的语法。

注意

您不能将包含逗号(,)字符的值传递给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