Overview
汎用セキュリティ サービスAPI (GSSAPI)認証メカニズムを使用すると、Kerberos プリンシパル名を指定して Kerberos サービスで認証できます。
注意
用語
GSSAPIページでは、認証メカニズムを参照する場合はKerberos を使用し、基礎のプロトコルまたはサービスを参照する場合は を使用します。ドライバーは、 Kerberosプロトコル上に構築された GSSAPI RFC-4752 SASL メカニズムを使用して認証します。
Kerberos 認証の指定
次のセクションには、次のプレースホルダー値を使用するコード例が含まれています。
<username>: URLでエンコードされたプリンシパル名(例: )"username%40REALM.ME"<hostname>:クライアントからアクセス可能なMongoDBデプロイのネットワーク アドレス<port>: MongoDBデプロイのポート番号
この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential
次の例では、接続stringを使用して GSSAPI を認証します。
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");
MongoCredentialクラスを使用して GSSAPI認証メカニズムを指定するには、次の例に示すように、 createGSSAPICredential()メソッドを呼び出します。
MongoCredential credential = MongoCredential.createGSSAPICredential("<username>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Kerberos チケットの取得
Kerberosチケットを取得するには、GSSAPI Javaライブラリは、 邦土と KDC(Key Distrigger) JVMシステム プロパティを指定する必要があります。次の例は、これらのプロパティを設定する方法を示しています。
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
追加プロパティの設定
Kerberos の設定によっては、次の追加の認証メカニズム プロパティを 1 つ以上指定する必要がある場合があります。
SERVICE_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
これらのプロパティを指定する手順とサンプル コードについては、以下の [Connection String ] タブまたは [MongoCredential ] タブを選択してください。
GSSAPI 追加プロパティを指定するには、接続文字列にプロパティを <PROPERTY_NAME>:<value> 形式の URL パラメータとして含めます。
次の例では、GSSAPI に対して認証し、SERVICE_NAME プロパティを指定します。
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");
重要
次の GSSAPI プロパティは、MongoCredential インスタンスでのみ指定できます。
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
これらのプロパティを指定する方法については、 MongoCredentialタブを選択してください。
GSSAPI 追加プロパティを指定するには、 MongoCredentialインスタンスでwithMechanismProperty()メソッドを呼び出し、プロパティ名と値をパラメーターとして渡します。 MongoCredentialクラスで定義されているプロパティ名定数を使用します。
次の例では、GSSAPI で認証し、SERVICE_NAME_KEY 定数を指定しています。
MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");
JAVA_SUBJECT_KEY プロパティには javax.security.auth.Subject オブジェクトが必要です。Subject を検索するには、まず Java 認証および承認サービス (JAAS) を介して LoginContext を使用して認証する必要があります。次の例は、この構成を示しています。
LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>); loginContext.login(); Subject subject = loginContext.getSubject(); MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);
チケット キャッシングの構成
デフォルトでは、Java Reactive Streams ドライバーは、Kerberos チケットを作成した MongoClient インスタンスによってキャッシュします。配置で MongoClient インスタンスが頻繁に作成されて破棄される場合は、デフォルトの Kerberos チケットキャッシングの動作をプロセスによってキャッシングするように変更することで、パフォーマンスを向上させることができます。
重要
接続文字列認証メカニズムは JAVA_SUBJECT_PROVIDER メカニズムプロパティをサポートしないため、デフォルトのキャッシング動作を変更するには MongoCredential クラスを使用する必要があります。
プロセスで Kerberos チケットをキャッシュするには、JAVA_SUBJECT_PROVIDER メカニズム プロパティを指定し、および KerberosSubjectProvider を MongoCredential インスタンスで提供します。詳細は、次の例を参照してください。
/* All MongoClient instances sharing this instance of KerberosSubjectProvider will share a Kerberos ticket cache */ String myLoginContext = "myContext"; MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); /* Login context defaults to "com.sun.security.jgss.krb5.initiate" if unspecified in KerberosSubjectProvider */ credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_PROVIDER_KEY, new KerberosSubjectProvider(myLoginContext));
注意
Windowsでは、Oracle の JRE は、GSSAPI の実装で、SSI(Securitysupport Provider Interface)ではなく、 Local Security Authority(LSA) を使用します。これにより、 Windows Active Directory およびシングル サインオンの実装との相互運用性が制限されます。詳しくは、次のリソースを参照してください。
詳細情報
MongoDBへの認証の詳細については、 MongoDB Serverマニュアルの 認証 を参照してください。
Java Reactive Streams ドライバーを使用して MongoClient オブジェクトを作成する方法の詳細については、「MongoDB への接続」ガイドを参照してください。
API ドキュメント
このガイドで言及されているクラスとメソッドについて詳しくは、次の API ドキュメントを参照してください。