OIDC (ワークロード IdP)
Overview
OpenID Connect(OIDC)認証メカニズムを使用すると、 AzureやGoogle Cloud Platform (GCP )などのサードパーティのIdPを使用してMongoDBに認証できます。
このメカニズムは、 MongoDB AtlasまたはMongoDB Enterprise Advancedに認証されている場合、およびMongoDB v 7.0 以降に認証されている場合にのみ使用できます。
Tip
OIDC 認証
MongoDB Atlasを OIDC認証用に構成する方法の詳細については、Atlas ドキュメントの「OIDC を使用した Workforce IdP の設定」を参照してください。
MongoDBで OIDC認証を使用する方法の詳細については、 MongoDB Serverマニュアルの 「OpenID Connect 認証」 と 「 MongoDB Serverパラメーター」 を参照してください。
コード プレースホルダー
このページのコード例では、次のプレースホルダーを使用します。
+srv
: MongoDB Atlasクラスターに接続している場合にのみ、このオプションを接続文字列のプレフィックスに含めます。+srv
オプションの詳細については、 MongoDB Serverマニュアルの「 接続文字列形式 」を参照してください。<username>
: Azure IMDS で認証する場合のAzureマネージド ID または エンタープライズアプリケーションのクライアントIDまたはアプリケーションID 。<hostname>
: MongoDBデプロイのネットワーク アドレス。<port>
: MongoDBデプロイのポート番号。このパラメーターを省略すると、ドライバーはデフォルトのポート番号(27017
)を使用します。 MongoDB Atlasクラスターに接続するときにポートを指定する必要はありません。<audience>
: MongoDBデプロイで構成されたオーディエンス パラメータ。
このページのコード例を使用するには、これらのプレースホルダーを独自の値に置き換えます。
アプリケーションでの OIDC 認証の使用
次のセクションでは、OIDC認証を使用してさまざまなプラットフォームから認証する方法について説明します。
Azure IMDS
アプリケーションがAzure VM 上で実行されている場合、またはAzure Instance Metadata Service (EMDS)を使用している場合は、 .NET/ C#ドライバーに組み込まれているAzureサポートを使用してMongoDBを認証できます。
Azure IMDS OIDC認証は、MongoCredential
オブジェクトを使用するか、接続文字列の一部として使用することで、MongoClientSettings
オブジェクトで指定できます。対応する構文を確認するには、 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);
GCP IMDS
アプリケーションが Google Compute Engine VM で実行され、または GCP インスタンス メタデータ サービス を使用している場合 、.NET/C# ドライバーに組み込まれている GCP サポートを使用して MongoDB に認証できます。
MongoClientSettings
オブジェクトでGCP IMDS OIDC 認証を指定するには、MongoCredential
オブジェクトを使用するか、 接続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
インターフェースを実装するクラスを定義します。 このインターフェースには 2 つのメソッドが含まれています。
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ドキュメントを参照してください。