Docs Menu
Docs Home
/ / /
C ドライバー
/

認証

項目一覧

  • 基本認証(SCRAM-SHA- 256 )
  • 基本認証(SCRAM-SHA- 1 )
  • レガシー認証(MONGODB-CR)
  • GSSAPI (Kerberos)認証
  • SASL プレーン認証
  • X. 509証明書認証
  • Amazon Web Services IAM による認証
  • URI 経由Amazon Web Services認証情報
  • 環境経由Amazon Web Services認証情報
  • ECS 経由Amazon Web Services認証情報
  • EC2 経由Amazon Web Services認証情報

このガイドでは、MongoDB C ドライバーでの認証オプションの使用について説明します。 接続を行う前に、MongoDB サーバーも認証用に適切に構成されていることを確認してください。 詳細については、 MongoDB セキュリティ ドキュメントを参照してください。

MongoDB C ドライバーは、MongoDB 接続 URI の使用を通じていくつかの認証メカニズムをサポートします。

デフォルトでは、接続string (およびオプションの認証データベース)の一部としてユーザー名とパスワードが指定されている場合、サーバーのデフォルトの認証メカニズムを介して接続するために使用されます。

デフォルト以外の特定の認証メカニズムを選択するには、サポートされているメカニズムのリストを参照してください。

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb");

authMechanism 接続stringオプションで現在サポートされている値は次のとおりです。

MongoDB 4.0 introduces support for authenticating using the SCRAM protocol with the more secure SHA-256 hash described in RFC 7677. この認証メカニズムを使用すると、認証時にパスワードがネットワーク経由で実際に送信されることはなく、クライアントのパスワードがサーバーが認識するパスワードと同じであることを計算された証明が与えられます。 MongoDB 4では 。 0に設定されている場合、C ドライバーは保存された SCRAM-SHA- 1および SCRAM-SHA- 256認証情報を持つユーザー向けの正しいデフォルトの認証メカニズムを決定できます。

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb");
/* the correct authMechanism is negotiated between the driver and server. */

あるいは、SCRAM-SHA- 256を authMechanism として明示的に指定することもできます。

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-256&authSource=mydb");

MongoDB4.0 より前のデフォルトの認証メカニズムはSCRAM-SHA-1 です( RFC5802 )。この認証メカニズムを使用すると、認証時にパスワードがネットワーク経由で実際に送信されることはなく、クライアントのパスワードがサーバーが認識するパスワードと同じであることを計算された証明が与えられます。

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-1&authSource=mydb");

注意

SCRAM-SHA-1 はデフォルトでadminデータベースに対して認証します。 ユーザーが別のデータベースで作成されている場合は、 authSource を指定する必要があります。

MONGODB-CR authMechanism は非推奨となり、MongoDB 4.0では機能しなくなりました。 代わりに、authMechanism を指定しないで、ドライバーはサーバーと互換性のある認証メカニズムを使用します。

注意

UNIX のような環境では、Kerberos をサポートするためにはドライバーをcyrus-saslに対してコンパイルする必要があります。

Windows では、Kerberos をサポートするためには、Windows Native SAPI またはcyrus-saslに対してドライバーをコンパイルする必要があります。 ドライバーのデフォルト構成では Windows Native SPI が使用されます。

デフォルト構成を変更するには、cmake オプションENABLE_SASLを使用します。

GSSAPI (Kerberos)認証は MongoDB のエンタープライズ エディションで利用できます。 GSSAPIを使用して認証するには、MongoDB C ドライバーを SASL サポート付きでインストールする必要があります。

UNIX のような環境では、次の認証方法を使用する前にkinitコマンドを実行します。

$ kinit mongodbuser@EXAMPLE.COM
mongodbuser@EXAMPLE.COM's Password:
$ klistCredentials cache: FILE:/tmp/krb5cc_1000
Principal: mongodbuser@EXAMPLE.COM
Issued Expires Principal
Feb 9 13:48:51 2013 Feb 9 23:48:51 2013 krbtgt/EXAMPLE.COM@EXAMPLE.COM

MongoDB URI を使用して認証するようになりました。 GSSAPI$external仮想データベースに対して認証するため、URI でデータベースを指定する必要はありません。 Kerberos プリンシパルは URL エンコードする必要があることに注意してください。

mongoc_client_t *client;
client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI");

注意

GSSAPI$externalデータベースに対して認証するため、authSource データベースを指定する必要はありません。

ドライバーは次の GSSAPI プロパティをサポートしています。

  • CANONICALIZE_HOST_NAME:Kerberos データベースで使用されているものとは異なるホスト名がホストにより報告された場合に、Cyrus-SASL ではこの操作が必要になることがあります。 デフォルトは「false」です。

  • SERVICE_NAME: デフォルトの「 MongoDB 」とは異なるサービス名を使用します。

URL でプロパティを設定します。

mongoc_client_t *client;
client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI&"
"authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:true");

Invalid net addressなどのエラーが発生した場合は、アプリケーションが NAT(ネットワーク アドレス変換)ファイアウォールの背後にあるかどうかを確認してください。 その場合は、 forwardableaddressless Kerberos チケットを使用するチケットを作成します。 これは、 -f -Akinitに渡すことで可能です。

$ kinit -f -A mongodbuser@EXAMPLE.COM

注意

SASL PLAIN認証を使用するには、MongoDB C ドライバーを SASL サポートでコンパイルする必要があります。

MongoDB Enterprise Edition は、最初は LDAP サーバーに認証を委任することを目的としたSASL PLAIN認証メカニズムをサポートしています。 SASL PLAINメカニズムの使用は、ユーザー名とパスワードを使用するチャレンジ レスポンス メカニズムと非常によく似ています。 この認証メカニズムでは、 LDAPサポートのために$external仮想データベースを使用します。

注意

SASL PLAIN は、クリアテキスト認証メカニズムです。 PLAINメカニズムを使用する場合は、証明書検証とともに TLS を使用して MongoDB に接続することを 強くおすすめします 。

mongoc_client_t *client;
client = mongoc_client_new ("mongodb://user:password@example.com/?authMechanism=PLAIN");

PLAIN$externalデータベースに対して認証するため、authSource データベースを指定する必要はありません。

注意

MongoDB C ドライバーは、X. 509認証サポートを使用して TLS サポートを使用してコンパイルする必要があります。 これが完了したら、次のオプションでサーバーを起動します。

$ mongod --tlsMode requireTLS --tlsCertificateKeyFile server.pem --tlsCAFile ca.pem

MONGODB-X509メカニズムは、TLS ネゴシエート中にドライバーによって提示された X. 509証明書から派生したユーザー名を認証します。 この認証方法では、証明書検証機能を備えた TLS 接続を使用する必要があります。

mongoc_client_t *client;
mongoc_ssl_opt_t ssl_opts = { 0 };
ssl_opts.pem_file = "mycert.pem";
ssl_opts.pem_pwd = "mycertpassword";
ssl_opts.ca_file = "myca.pem";
ssl_opts.ca_dir = "trust_dir";
ssl_opts.weak_cert_validation = false;
client = mongoc_client_new ("mongodb://x509_derived_username@localhost/?authMechanism=MONGODB-X509");
mongoc_client_set_ssl_opts (client, &ssl_opts);

MONGODB-X509$externalデータベースに対して認証するため、authSource データベースを指定する必要はありません。 x 509 _derived_username の詳細については、 MongoDB サーバーx を参照してください。 509チュートリアル。

注意

MongoDB C ドライバーは、ユーザー名が指定されていない場合、および MongoDB 3.4ではユーザー名はまったく必要ない場合に、x 509の派生ユーザー名を決定しようとします。

MONGODB-AWSMongoDBメカニズムは、Amazon Web Services Identity and Access Management(IAM)によって提供される認証情報を使用して サーバーを認証します。

認証するには、 $externalデータベースに関連付けられた Amazon リソース名(ARN)を持つユーザーを作成し、URI でMONGODB-AWS authMechanismを指定します。

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost/?authMechanism=MONGODB-AWS");

MONGODB-AWSは常に$externalデータベースに対して認証するため、authSource データベースを指定する必要はありません。

認証情報には、 access key idsecret access key 、および任意のsession tokenが含まれます。 これらは、次の方法で取得できます。

認証情報は、ユーザー名/パスワードとして URI で直接渡すことができます。

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS");

これには、 authMechanismPropertiesとともに渡されたsession tokenが含まれる場合があります。

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<token>");

認証情報が URI を介して渡されない場合、libmongoc は次の環境変数をチェックします。

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN (optional)

認証情報が URI または環境変数では渡されない場合、libmongoc は環境変数AWS_CONTAINER_CREDENTIALS_RELATIVE_URIが設定されているかどうかを確認し、設定されている場合はリンク ローカル アドレスをクエリして ECS タスク メタデータから一時的な認証情報を取得しようとします。

認証情報が URI または環境変数で渡されず、環境変数AWS_CONTAINER_CREDENTIALS_RELATIVE_URIが設定されていない場合、libmongoc はリンク ローカル アドレスをクエリして、EC 2マシンのメタデータから一時的な認証情報を検索しようとします。

Tip

以下も参照してください。

戻る

Tutorial