OIDC(工作负载联合身份)
Overview
OpenID Connect (OIDC)身份验证机制允许您使用第三方身份提供商(例如Azure)向MongoDB进行身份验证。
只有在对MongoDB Atlas或MongoDB Enterprise Advanced进行身份验证时,并且只能在对MongoDB v7.0 或更高版本进行身份验证时,才能使用此机制。
提示
OIDC 身份验证
要学习;了解有关为 OIDC身份验证配置MongoDB Atlas 的更多信息,请参阅Atlas文档中的使用 OIDC 设置劳动力身份联合。
有关在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 身份验证
以下部分介绍如何使用 OIDC身份验证从各种平台进行身份验证。
Azure IMDS
如果应用程序在 Azure VM 上运行,或以其他方式使用 Azure 实例元数据服务 (IMDS),您可以使用 .NET/C# 驱动程序的内置 Azure 支持对 MongoDB 进行身份验证。
您可以使用Azure MongoClientSettings
MongoCredential
对象或作为连接string 的一部分,对 对象指定 IMDS OIDC身份验证。选择Connection String或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);
自定义回调
.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 文档
要学习;了解有关本页讨论的任何方法或类型的更多信息,请参阅以下API文档: