ユーザープールへのソーシャル ID プロバイダーの追加 - Amazon Cognito

ユーザープールへのソーシャル ID プロバイダーの追加

ウェブおよびモバイルアプリのユーザーは、Facebook、Google、Amazon、Apple などのソーシャル ID プロバイダー (IdP) 経由でサインインできます。組み込みのホストされたウェブ UI の場合、Amazon Cognito は、すべての認証済みユーザーのトークンを処理して管理します。したがって、バックエンドシステムが標準とするユーザープールのトークンセットは 1 つです。

ソーシャル ID プロバイダーを追加するには、AWS マネジメントコンソール、AWS CLI、または Amazon Cognito API コールを使用できます。


                ソーシャルサインインの認証の概要
注記

サードパーティー (フェデレーション) 経由のサインインは、Amazon Cognito のユーザープールで使用できます。この機能は、Amazon Cognito ID プール (フェデレーティッドアイデンティティ) 経由のフェデレーションとは別のものです。

前提条件

開始する前に、以下が必要です。

  • アプリケーションクライアントとユーザープールドメインがあるユーザープール。詳細については、「ユーザープールの作成」を参照してください。

  • ソーシャル ID プロバイダー。

ステップ 1: ソーシャル IdP に登録する

Amazon Cognito でソーシャル IdP を作成するには、アプリケーションをソーシャル IdP に登録して、クライアント ID とクライアントシークレットを取得する必要があります。

  1. Facebook の開発者アカウントを作成します。

  2. Facebook 認証情報を使用してサインインします。

  3. [マイアプリ] メニューから、[新しいアプリを作成] を選択します。

  4. Facebook アプリに名前を付け、[アプリ ID を作成してください] を選択します。

  5. 左のナビゲーションバーで、[設定]、[ベーシック] の順に選択します。

  6. [アプリ ID] と [アプリシークレット] を書き留めます。これらは次のセクションで使用します。

  7. ページの下部で、[+ プラットフォームを追加] を選択します。

  8. [ウェブサイト] を選択します。

  9. [ウェブサイト] の [サイト URL] に、/oauth2/idpresponse エンドポイントを含むユーザープールのドメインを入力します。

    https://<your-user-pool-domain>/oauth2/idpresponse
  10. [Save changes] を選択します。

  11. [アプリドメイン] にユーザープールのドメインを入力します。

    https://<your-user-pool-domain>
  12. [Save changes] を選択します。

  13. ナビゲーションバーで [プロダクト] を選択し、[Facebook ログイン] の [設定] を選択します。

  14. ナビゲーションバーで [Facebook ログイン]、[設定] の順に選択します。

    [有効な OAuth リダイレクト URI] にリダイレクト URL を入力します。/oauth2/idpresponse エンドポイントを持つユーザープールドメインで構成されます。

    https://<your-user-pool-domain>/oauth2/idpresponse
  15. [Save changes] を選択します。

  1. Amazon の開発者アカウントを作成します。

  2. Amazon 認証情報を使用してサインインします。

  3. Amazon クライアント ID およびクライアントシークレットを受け取るには、Amazon セキュリティプロファイルを作成する必要があります。

    ページの上部にあるナビゲーションバーで [Apps and Services (アプリとサービス)] を選択し、[Login with Amazon] を選択します。

  4. [Create a New Security Profile (新しいセキュリティプロファイルの作成)] を選択します。

  5. [セキュリティプロファイル名]、[セキュリティプロファイルの説明]、[Consent Privacy Notice URL (プライバシー規約 URL の同意)] に入力します。

  6. [Save] を選択します。

  7. [クライアント ID] および [クライアントシークレット] を選択して、クライアント ID およびシークレットを表示します。これらは次のセクションで使用します。

  8. 歯車にマウスカーソルを合わせ、[Web Settings (ウェブ設定)]、[編集] の順に選択します。

  9. [Allowed Origins (許可されたオリジン)] にユーザープールのドメインを入力します。

    https://<your-user-pool-domain>
  10. [/oauth2/idpresponse] エンドポイントを含むユーザープールドメインを [Allowed Return URLs (許可されたリターン URL)] に入力します。

    https://<your-user-pool-domain>/oauth2/idpresponse
  11. [Save] を選択します。

  1. Google の開発者アカウントを作成します。

  2. Google 認証情報を使用してサインインします。

  3. [CONFIGURE A PROJECT (プロジェクトの設定)] を選択します。

  4. プロジェクト名を入力し、[NEXT (次へ)] を選択します。

  5. プロダクト名を入力し、[NEXT (次へ)] を選択します。

  6. [Where are you calling from? (どちらからアクセスしていますか?)] ドロップダウンリストから [ウェブブラウザ] を選択します

  7. [Authorized JavaScript origins (承認済みの JavaScript 生成元)] にユーザープールのドメインを入力します。

    https://<your-user-pool-domain>
  8. [CREATE (作成)] を選択します。このステップでは、[クライアント ID] と [クライアントシークレット] は使用しません。

  9. [DONE (完了)] を選択します。

  10. Google コンソールにサインインします。

  11. 左のナビゲーションバーで、[認証情報] を選択します。

  12. [認証情報を作成] ドロップダウンリストから [OAuth クライアント ID] を選択して、OAuth 2.0 認証情報を作成します。

  13. [ウェブアプリケーション] を選択します。

  14. [Authorized JavaScript origins (承認済みの JavaScript 生成元)] にユーザープールのドメインを入力します。

    https://<your-user-pool-domain>
  15. [承認済みのリダイレクト URI] に /oauth2/idpresponse エンドポイントのユーザープールのドメインを入力します。

    https://<your-user-pool-domain>/oauth2/idpresponse
  16. [作成] を 2 回選択します。

  17. [OAuth クライアント ID] と [クライアントシークレット] を書き留めます。これらは次のセクションで必要になります。

  18. [OK] を選択します。

  1. Apple の開発者アカウントを作成します。

  2. Apple 認証情報を使用してサインインします。

  3. 左のナビゲーションバーで、[Certificates, IDs & Profiles] を選択します。

  4. 左のナビゲーションバーで、[Identifiers (識別子)] を選択します。

  5. [Identifiers (識別子)] ページで、[+] アイコンを選択します。

  6. [Register a New Identifier] ページで、[App IDs]、[Continue] の順に選択します。

  7. [Register an App ID] ページで、次の操作を行います。

    1. [説明] に、説明を入力します。

    2. [App ID Prefix] に、識別子を入力します。[App ID Prefix ] の値を書き留めます。この値は、ステップ 2: ユーザープールにソーシャル IdP を追加する で Apple を ID プロバイダーとして選択する際に必要になります。

    3. [Capabilities] で、[Sign In with Apple] を選択してから [Edit (編集)] を選択します。

    4. [Sign in with Apple: App ID Configuration] ページで、アプリの適切な設定を選択後、[保存] を選択します。

    5. [Continue] を選択します。

  8. [Confirm your App ID] ページで、[登録] を選択します。

  9. [Identifiers] ページの右側にある [App IDs] にマウスカーソルを合わせ、[Services IDs] を選択後、[+] アイコンを選択します。

  10. [Register a New Identifier] ページで、[Services IDs]、[Continue] の順に選択します。

  11. [Register a Services ID] ページで、次の操作を行います。

    1. [説明] に、説明を入力します。

    2. [Identifier] に、識別子を入力します。この Services ID の値を書き留めます。この値は、ステップ 2: ユーザープールにソーシャル IdP を追加する で Apple を ID プロバイダーとして選択する際に必要になります。

    3. [Sign In with Apple] を選択後、[Configure] を選択します。

    4. [Web Authentication Configuration] ページで、[Primary App ID] を選択します。[Web Domain] に、ユーザープールのドメインを入力します。[Return URLs] に、ユーザープールのドメインを入力し、/oauth2/idpresponse エンドポイントを追加します。次に例を示します。

      https://<your-user-pool-domain>/oauth2/idpresponse
    5. [Add (追加)]、[Save (保存)] の順に選択します。ドメインを検証する必要はありません。

    6. [Continue] を選択し、[登録] を選択します。

  12. 左のナビゲーションバーで、[Keys (キー)] を選択します。

  13. [Keys (キー)] ページで、[+] アイコンを選択します。

  14. [Register a New Key] ページで、次の操作を行います。

    1. [Key Name] に、キー名を入力します。

    2. [Sign In with Apple] を選択後、[Configure] を選択します。

    3. [Configure Key] ページで、[Primary App ID]、[Save] の順に選択します。

    4. [Continue] を選択し、[登録] を選択します。

  15. [Download Your Key] ページで、[Download] を選択してプライベートキーをダウンロードし、[Done] を選択します。このプライベートキーおよび [Key ID] の値は、ステップ 2: ユーザープールにソーシャル IdP を追加する で Apple を ID プロバイダーとして選択する際に必要になります。

ステップ 2: ユーザープールにソーシャル IdP を追加する

このセクションでは、前のセクションで取得したクライアント ID およびクライアントシークレットを使用してユーザープールにソーシャル IdP を設定します。

AWS マネジメントコンソール でユーザープールのソーシャル ID プロバイダーを設定するには

  1. Amazon Cognito コンソールに移動します。AWS 認証情報を要求される場合があります。

  2. [Manage your User Pools] を選択します。

  3. リストから既存のユーザープールを選択するか、ユーザープールを作成します。

  4. 左のナビゲーションバーで、[ID プロバイダー] を選択します。

  5. ソーシャル ID プロバイダー (例: [Facebook]、[Google]、[Login with Amazon]、[Apple]) を選択します。

  6. Google と Login with Amazon の場合は、前のセクションでソーシャル ID プロバイダーから取得したアプリのクライアント ID とクライアントシークレットを入力します。Facebook の場合は、前のセクションでソーシャル ID プロバイダーから受け取ったアプリクライアント ID とアプリクライアントシークレットを入力し、API バージョンを選択します。Facebook API の各バージョンにはライフサイクルとサポート終了日があるため、可能な限り高いバージョン (バージョン 2.12 など) を選択することをお勧めします。問題が発生した場合は、API バージョンのポスト作成を変更できます。Facebook のスコープと属性は API バージョンごとに異なる可能性があるため、統合をテストすることをお勧めします。 Sign in with Apple の場合は、前のセクションで取得したサービス ID、チーム ID、キー ID、およびプライベートキーを入力します。

  7. 承認するスコープの名前を入力します。スコープは、アプリでアクセスするユーザー属性 (nameemail など) を定義します。Facebook の場合は、コンマで区切る必要があります。Google および Login with Amazon の場合は、スペースで区切って指定します。Sign in with Apple の場合は、アクセスするスコープのチェックボックスをオンにします。

    ソーシャル ID プロバイダー スコープ例
    Facebook public_profile, email
    Google profile email openid
    Login with Amazon profile postal_code
    Apple でのサインイン email name

    アプリユーザーはこれらの属性をアプリに提供することに同意を求められます。スコープの詳細については、Google、Facebook、Login with Amazon、および Sign in with Apple のドキュメントを参照してください。

    以下は、Sign in with Apple の場合にスコープが返らない可能性があるユーザーシナリオです。

    • エンドユーザーが Apple のサインインページを離れるとエラーが発生する (Cognito の内部障害または開発者が記述したプログラムが原因である可能性があります)

    • サービス ID 識別子がユーザープールや他の認証サービス全体で使用されている

    • エンドユーザーが以前にサインインしてから、開発者によってさらにスコープが追加されている (新しい情報は取得されません)

    • 開発者によって削除されたユーザーが Apple ID プロファイルからアプリを削除せずに再度サインインしている

  8. 設定するソーシャル ID プロバイダーに対して [有効化] を選択します。

  9. ナビゲーションバーから、[アプリクライアントの設定] を選択します。

  10. ユーザープールアプリの [有効な ID プロバイダ] の 1 つとしてソーシャル ID プロバイダーを選択します。

  11. ユーザープールアプリの [コールバック URL] にコールバック URL を入力します。これは、ユーザーが認証に成功した後でリダイレクトされるページの URL です。

    https://www.example.com
  12. [Save changes] を選択します。

  13. [属性マッピング] タブで、次のように最低でも必須属性 (通常は email) のマッピングを追加します。

    1. Facebook、Google、または Amazon の属性名チェックボックスをオンにして選択します。Amazon Cognito コンソールに一覧表示されていない追加属性の名前を入力することもできます。

    2. ドロップダウンリストから送信先ユーザープール属性を選択します。

    3. [Save changes] を選択します。

    4. [Go to summary] を選択します。

ステップ 3: ソーシャル IdP の設定をテストする

前の 2 つのセクションの要素を使用してログイン URL を作成できます。この URL を使用してソーシャル IdP の設定をテストします。

https://<your_user_pool_domain>/login?response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com

ドメインは、コンソールにあるユーザープールの [ドメイン名] ページで確認できます。クライアント ID は [アプリクライアントの設定] ページにあります。redirect_uri パラメータのコールバック URL を使用します。これは、ユーザーが認証に成功した後でリダイレクトされるページの URL です。

注記

5 分以内に完了しなかったリクエストはキャンセルされ、ログインページにリダイレクトされた後、Something went wrong エラーメッセージが表示されます。