web-dev-qa-db-ja.com

MongoDB Stitchでのカスタム認証の仕組み

MongoDBカスタム認証 に続いて、以下の最小限のフィールドを持つJWT Tokenは、MongoDB Stitch Authenticationで機能することが示されています。また、トークンはExternal Authentication Systemによって発行される必要があります

{
  "aud": "<stitch app id>"
  "sub": "<unique user id>",
  "exp": <NumericDate>,
}

私はこれをテストしました、そしてそれは同様に機能します

  1. Stitchアプリを作成し、Custom Authentication Providerでユーザーを有効にしました
  2. 以下の入力で Jwt.io を使用してサンプルトークンを生成しました。 (カスタム認証プロバイダーを有効にするときに構成されたものと同じアルゴリズムとキーを使用します。ここではHS256と)

enter image description here

それは方法で機能し、

  • MongoDB Stich Users Collectionのユーザーをvalue"sub": "<unique user id>"で提供される一意のsubで検証し、ユーザーが存在する場合はそのユーザーのオブジェクトIDを返します。
  • ユーザーが存在しない場合は、入力に対してユーザーを作成し、オブジェクトIDを返します。

クエリは、

  1. ログイン失敗を返す代わりに新しいユーザーを作成するのはなぜですか?これは、任意のユーザーが任意の資格情報でオンデマンドでログインできるように機能しますか?
  2. MongoDB Stitch Custom AuthenticationExternal Authentication Systemを発行してJWTを発行する場合、ユーザー登録時にユーザーデータは実際にどこに保存されますか? -MongoDB Stitch App CollectionまたはExternal Authentication API System
4

これが MongoDB Support からの応答です。

Stitchが新しい「ユーザー」を作成する理由

このシナリオで作成する「ユーザー」スティッチは内部ユーザーです。この「ユーザー」には、JWTから提供されるユーザーデータとメタデータも含まれ、アプリケーションがリンクされているAtlasクラスター内の他のコレクションと一緒に保存されません。この「ユーザー」は、トリガーまたは他の関数を使用してデータベースにロードしない限り、MongoDBにアクセスできないことに注意してください。

ログイン失敗が返されないのはなぜですか

カスタム認証プロバイダーは、外部システムからの署名済みJWTを署名鍵の独自のコピーに対してチェックするだけなので、ログインの失敗は返されません。署名が一致した場合、ログインは成功したと見なされます。

ログインに失敗するのは、外部認証プロバイダーの責任です。ステッチではありません。

ユーザーデータは実際にどこに保存されますか

ユーザーデータはデータベース内で管理する必要があります。これをカスタム認証プロバイダーと統合する最も効率的な方法は、作成および/またはログイン操作タイプで Authentication Trigger を使用することです。これにより、認証イベントがトリガーされるたびに Stitch Function を実行できます。

MongoDBブログ に認証トリガーを使用する例があり、プロセスをさらに説明するのに役立ちます。

4