Overview
OpenID Connect(OIDC)認証メカニズムを使用すると、 AzureやGoogle Cloud Platform (GCP )などのサードパーティのIdPを使用してMongoDBに認証できます。
重要
MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。
OIDC認証用のMongoDB Atlasの構成の詳細については、Atlas ドキュメントの「 OIDC を使用した Workforce IdP の設定 」を参照してください。
MongoDBで OIDC認証を使用する方法の詳細については、 MongoDB Serverマニュアルの「 OIDC/OAuth2.0 と oidcIdentityProviders による認証と認可 」を参照してください。
コード プレースホルダー
このページのコード例では、次のプレースホルダーを使用します。
<username>: Azureマネージド ID または エンタープライズアプリケーションのクライアントIDまたはアプリケーションID 。 Azure IMDS認証に使用されます。<hostname>: MongoDBデプロイのネットワーク アドレス。<port>: MongoDBデプロイのポート番号。 このパラメーターを省略すると、ドライバーはデフォルトのポート番号(27017)を使用します。 MongoDB Atlasクラスターに接続する場合、ポート番号は必要ありません。<audience>または<percent-encoded audience>: MongoDBデプロイに構成されたaudienceサーバーパラメータの値。接続文字列で指定する場合、この値を パーセント エンコード します。
コード例を使用するには、これらのプレースホルダーを独自の値に置き換えます。
OIDC 認証の指定
次のセクションでは、OIDC を使用してさまざまなプラットフォームから認証する方法について説明します。
Azure IMDS
アプリケーションがAzure VM 上で実行される場合、またはAzure Instance Metadata Service(MDS)を使用する場合は、 Java Reactive Streams ドライバーに組み込まれているAzureサポートを使用してMongoDBを認証できます。
Azure IMDS OIDC 認証は、MongoCredential を使用するか、 接続stringの一部として指定できます。
対応する構文を表示するには、Connection String タブまたは MongoCredential タブから を選択します。
認証メカニズムとしてAzure IMDS OIDC を指定するには、 接続stringに次のオプションを設定します。
authMechanism:MONGODB-OIDCに設定します。authMechanismProperties:ENVIRONMENT:azure,TOKEN_RESOURCE:<url-encoded-resource>に設定します。
<username> プレースホルダーを、 Azure が管理する IdP またはエンタープライズアプリケーションのクライアントIDまたはアプリケーションIDに置き換えます。 <percent-encoded audience> プレースホルダーを、 MongoDBデプロイで構成されたオーディエンスサーバーパラメータのパーセント エンコード値に置き換えます。
ENVIRONMENT が azure に設定されている場合は、 URLエンコードされた TOKEN_RESOURCE 値を指定する必要があります。カンマ(,)文字とそのエンコーディング(%2C)は予約されており、これらの文字を値で使用すると、ドライバーはカンマをキーと値のペアの区切り文字として解釈します。 MongoCredentialタブに示されているように、MongoCredentialインスタンスではカンマを含む値を指定する必要があります。
MongoClient mongoClient = MongoClients.create( "mongodb://<username>@<hostname>:<port>/?" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");
<username>プレースホルダーを、Azure が管理する IdP またはエンタープライズ アプリケーションのクライアント ID またはアプリケーション ID に置き換えます。 <audience>プレースホルダーを、MongoDB 配置に構成されたaudienceサーバー パラメータの値に置き換えます。
MongoCredential credential = MongoCredential.createOidcCredential("<username>") .withMechanismProperty("ENVIRONMENT", "azure") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
GCP IMDS
アプリケーションがGoogle Compute Engine VM で実行される場合、またはGCPインスタンス メタデータ サービスを使用する場合は、 Java Reactive Streams ドライバーに組み込まれているGCPサポートを使用してMongoDBを認証できます。
GCP IMDS OIDC 認証は、MongoCredential を使用するか、接続stringの一部として指定できます。
対応する構文を表示するには、Connection String タブまたは MongoCredential タブから を選択します。
認証メカニズムとしてGCP IMDS OIDC を指定するには、 接続stringに次のオプションを設定します。
authMechanism:MONGODB-OIDCに設定します。authMechanismProperties:ENVIRONMENT:gcp,TOKEN_RESOURCE:<url-encoded-resource>に設定します。
<percent-encoded audience> プレースホルダーを、 MongoDBデプロイに構成された audienceサーバーパラメータのパーセント エンコードされた値に置き換えます。
ENVIRONMENT が gcp に設定されている場合は、 URLエンコードされた TOKEN_RESOURCE 値を指定する必要があります。カンマ(,)文字とそのエンコーディング(%2C)は予約されており、これらの文字を値で使用すると、ドライバーはカンマをキーと値のペアの区切り文字として解釈します。 MongoCredentialタブに示されているように、MongoCredentialインスタンスではカンマを含む値を指定する必要があります。
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>");
<audience>プレースホルダーを、MongoDB 配置に構成されたaudienceサーバー パラメータの値に置き換えます。
MongoCredential credential = MongoCredential.createOidcCredential() .withMechanismProperty("ENVIRONMENT", "gcp") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Kubernetes
アプリケーションがKubernetesクラスターで実行される場合は、 Java Reactive Streams ドライバーに組み込まれているKubernetesサポートを使用して、 MongoDBに認証できます。
Connection StringMongoCredential対応する構文を表示するには、 タブまたは タブから を選択します。
認証メカニズムとしてKubernetes OIDC を指定するには、接続文字列に次のオプションを設定します。
authMechanism:MONGODB-OIDCに設定します。authMechanismProperties:ENVIRONMENT:k8sに設定します。
<hostname> と <port> のプレースホルダーを、 MongoDBデプロイのネットワーク アドレスとポート番号に置き換えます。
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>/" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s");
<hostname> と <port> のプレースホルダーを、 MongoDBデプロイのネットワーク アドレスとポート番号に置き換えます。
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("ENVIRONMENT", "k8s"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
認証メカニズムとしてKubernetes OIDC を指定すると、ドライバーは次のいずれかのロケーションから OIDC トークンの内容を読み取ります。
AZURE_FEDERATED_TOKEN_FILEAzure Kubernetes Service(AKS)で実行中アプリケーションの環境変数AWS_WEB_IDENTITY_TOKEN_FILEElastic Kubernetes Service(EKS)で実行中アプリケーションの環境変数/var/run/secrets/kubernetes.io/serviceaccount/tokenファイル: Google Kubernetes Engine(GKE)で実行されるものを含む他のすべてのアプリケーションのデフォルトのロケーション
OIDC トークンは、アプリケーション の実行に使用するサービスに対応するロケーションに保存する必要があります。
カスタム コールバック
Java Reactive Streams ドライバーでは、 Azure Functions やAzure Kubernetes Service(AKS)を含むすべてのプラットフォームで組み込みサポートを提供していません。 代わりに、OIDC を使用してこれらのプラットフォームから認証するためのカスタムコールバックを定義する必要があります。 これを行うには、次のコード例に示すように、 "OIDC_CALLBACK"認証プロパティを使用します。
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { String accessToken = ... return new OidcCallbackResult(accessToken); });
"OIDC_CALLBACK"プロパティの値は、 OidcCallbackContextをパラメータとして受け入れ、 OidcCallbackResultを返すOidcCallback関数インターフェースの Lambda またはその他の実装である必要があります。
次の例では、ローカルファイルシステム内の "access-token.dat" という名前のファイルから OIDC トークンを検索します。
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { string accessToken = new String(Files.readAllBytes(Paths.get("access-token.dat")); return new OidcCallbackResult(accessToken); }); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
API ドキュメント
このページで説明するメソッドやタイプの詳細については、次のAPIドキュメントを参照してください。