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