Docs Menu
Docs Home
/ / /
C#/.NET
/

エンタープライズ認証メカニズム

項目一覧

  • Overview
  • GSSAPI/Kerberos による認証
  • additionalProperties
  • LDAP による認証(PLAIN)
  • MONGODB-OIDC
  • Azure IMDS
  • GCP IMDS
  • カスタム コールバック
  • API ドキュメント

このガイドでは、MongoDB Enterprise Edition でのみ使用可能な MongoDB で認証する方法を学習できます。 認証メカニズムは、ドライバーとサーバーが接続前にクライアントの ID を確認し、セキュリティを確保するためのプロセスです。

MongoDB Enterprise Edition の最新バージョンでは、次の認証メカニズムを使用できます。

  • GSSAPI/Kerberos

  • LDAP (Plain)

  • MONGODB-OIDC

別のメカニズムを使用して認証するには、 認証メカニズムの基礎ページを参照してください。 MongoDB クラスターへの接続を確立する方法の詳細については、接続ガイド を参照してください。

次のいずれかの方法を使用して、MongoDB に接続するときに認証メカニズムと認証情報を指定できます。

  • 接続string 接続 URI とも呼ばれます)は、string MongoDB配置に接続する方法と接続中の動作をドライバーに指示する です。

  • サポートされている認証メカニズムのファクトリー メソッドで、 MongoCredentialクラスに含まれています。

ジェネリック セキュリティ サービス API(GSSAPI)認証メカニズムにより、ユーザーはユーザーのプリンシパル名を使用して Kerberos サービスで認証できます。

次の例では、次のプレースホルダーを使用して認証メカニズムを指定します。

GSSAPI / Kerberos 認証メカニズムを指定するための対応する構文を確認するには、 タブまたは タブを選択します。Connection StringMongoCredential

var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authMechanism=GSSAPI");
var credential = MongoCredential.CreateGssapiCredential("<username>", "<password>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

Tip

パスワードの省略

次のいずれかに当てはまる場合は、パスワードを省略できます。

  • Windows では、アプリケーションを実行しているプロセス所有者は、認証を必要とするユーザーと同じです。

  • Linux では、ユーザーはkinit username@REALM.COM経由でキータブを初期化しました。

接続stringまたは MongoCredential クラスのファクトリー メソッドを使用して、認証メカニズムに追加のプロパティを指定できます。

次の例は、DNS サーバーを使用してホストの完全修飾ドメイン名を検索する方法を示しています。

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=CANONICALIZE_HOSTNAME:true");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_passwordpassword>");
credential = credential.WithMechanismProperty("CANONICALIZE_HOST_NAME", "true");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

次の例は、サービスの Realm と異なる場合にユーザーの Realm を指定する方法を示しています。

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>");
credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

次の例えは、デフォルトのmongodbでない場合にサービス名を指定する方法を示しています。

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>");
credential = credential.WithMechanismProperty("SERVICE_NAME", "<service name>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

次の例は、複数の認証メカニズム プロパティを指定する方法を示しています。

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>,SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>");
credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>")
.WithMechanismProperty("SERVICE_NAME", "<service name>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。

次の例では、次のプレースホルダーを使用して認証メカニズムを指定します。

  • <username>: LDAP ユーザー名

  • <password>: LDAP パスワード

  • <hostname>: クライアントからアクセス可能な MongoDB サーバーのネットワーク アドレス

  • <authenticationDb>: ユーザーの認証を含む MongoDB database

LDAP 認証メカニズムを指定するための対応する構文を確認するには、 Connection StringタブまたはMongoCredentialタブを選択します。

var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authSource=<authenticationDb>&authMechanism=PLAIN");
var credential = MongoCredential.CreatePlainCredential("<authenticationDb>", "<username>", "<password>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

重要

MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。

次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームから認証する方法について説明します。

MONGODB-OIDC 認証メカニズムの詳細については、 MongoDB ServerMongoDB Serverマニュアルの 「 OpenID Connect 認証 」 と 「 パラメーター 」 を参照してください。

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

Azure IMDS OIDC 認証は、MongoCredential オブジェクトを使用するか、 接続stringの一部として使用することで、MongoClientSettings オブジェクトで指定できます。 Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。

次のコード例は、Azure IMDS OIDC 認証を指定する方法を示しています。 <percent-encoded audience>プレースホルダーを、MongoDB 配置に設定されたaudienceパラメータのパーセント エンコードされた値に置き換えます。

カンマ( , )文字を含む値はauthMechanismPropertiesオプションに渡すことはできません。 MongoCredentialタブに示されているように、 MongoCredentialオブジェクトにカンマを含む値を指定する必要があります。

var connectionString = "mongodb://<db_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 認証を指定する方法を示しています。 <db_username>プレースホルダーを、Azure が管理する IdP またはエンタープライズ アプリケーションのクライアント ID またはアプリケーション ID に置き換えます。 <audience>プレースホルダーを、MongoDB 配置に設定されたaudienceパラメータの値に置き換えます。

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

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

MongoClientSettings オブジェクトでGCP IMDS OIDC 認証を指定するには、MongoCredential オブジェクトを使用するか、 接続stringの一部として使用します。 Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。

次のコード例は、認証GCP の一部として IMDS OIDCstring 認証を指定する方法を示しています。<audience>プレースホルダーを、MongoDB 配置に設定されたaudienceパラメータの値に置き換えます。

カンマ( , )文字を含む値はauthMechanismPropertiesオプションに渡すことはできません。 MongoCredentialタブに示されているように、 MongoCredentialオブジェクトにカンマを含む値を指定する必要があります。

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 認証を指定する方法を示しています。 <audience>プレースホルダーを、MongoDB 配置に設定されたaudienceパラメータの値に置き換えます。

var mongoClientSettings = MongoClientSettings.FromConnectionString(
"mongodb+srv://<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 ドキュメントを参照してください。

戻る

認証