Docs Menu

OIDC (ワークロード IdP)

OpenID Connect(OIDC)認証メカニズムを使用すると、 AzureなどのサードパーティのIdPを使用してMongoDBに認証できます。

このメカニズムは、 MongoDB AtlasまたはMongoDB Enterprise Advancedに認証されている場合、およびMongoDB v7.0 以降に認証されている場合にのみ使用できます。

Tip

OIDC 認証

OIDC認証用のMongoDB Atlasの構成の詳細については、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認証を使用してさまざまなプラットフォームから認証する方法について説明します。

アプリケーションが Azure VM 上で実行され、 や Azure インスタンス メタデータ サービス が使用される場合 (MDS)に設定されている場合は、.NET/C# ドライバーに組み込まれている Azure サポートを使用して MongoDB を認証できます。

Azure IMDS OIDC 認証は、MongoCredential オブジェクトを使用するか、 接続stringの一部として使用することで、MongoClientSettings オブジェクトで指定できます。 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);

.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ドキュメントを参照してください。