ユーザープールによるソーシャル ID プロバイダーの使用 - Amazon Cognito

ユーザープールによるソーシャル ID プロバイダーの使用

ウェブおよびモバイルアプリのユーザーは、Facebook、Google、Amazon、Apple などのソーシャル ID プロバイダー (IdP) 経由でサインインできます。組み込みの Hosted Web UI では、Amazon Cognito がすべての認証済みユーザーに関するトークンの処理と管理を提供します。このように、バックエンドシステムは 1 セットのユーザープールトークンで標準化できます。サポートされているソーシャル ID プロバイダーと統合するには、ホストされた UI を有効にする必要があります。Amazon Cognito がホストされた UI を構築すると、Amazon Cognito、OIDC およびソーシャル IdPs が情報の交換に使用する OAuth 2.0 エンドポイントが作成されます。詳細については、Amazon Cognito API リファレンスを参照してください。

AWS Management Console にソーシャル IdP を追加するか、AWS CLI または Amazon Cognito API を使用することができます。

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

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

前提条件

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

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

  • ソーシャル IdP。

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

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

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

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

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

  4. Facebook アプリケーションの名前を入力し、[Create App ID] (アプリケーション ID の作成) を選択します。

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

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

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

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

  9. [Website] (ウェブサイト) で、アプリケーションのサインインページへのパスを [Site URL] (サイト URL) に入力します。

    https://mydomain.us-east-1.amazoncognito.com/login?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
  10. [Save changes] (変更の保存) をクリックします。

  11. ユーザープールドメインのルートへのパスを [App Domains] (アプリケーションドメイン) に入力します。

    https://mydomain.us-east-1.amazoncognito.com
  12. [Save changes] (変更の保存) をクリックします。

  13. ナビゲーションバーで [Add Product] (プロダクトの追加) を選択し、[Facebook Login] (Facebook ログイン) の [Set up] (設定) を選択します。

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

    ユーザープールドメインの /oauth2/idpresponse エンドポイントへのパスを [Valid OAuth Redirect URIs] (有効な OAuth リダイレクト URI) に入力します。

    https://mydomain.us-east-1.amazoncognito.com/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. [Security Profile Name] (セキュリティプロファイル名)、[Security Profile Description] (セキュリティプロファイルの説明)、[Consent Privacy Notice URL] (プライバシー規約 URL の同意) に入力します。

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

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

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

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

    https://mydomain.us-east-1.amazoncognito.com
  10. /oauth2/idpresponse エンドポイントを使用するユーザープールドメインを [Allowed Return URLs] (許可されたリターン URL) に入力します。

    https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse
  11. [Save] を選択します。

Google Cloud プラットフォームの OAuth 2.0 の詳細については、「Google Workspace デベロッパーガイド」ドキュメントの「認証と認可の詳細」を参照してください。

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

  2. Google Cloud Platform コンソールにサインインします。

  3. 上部のナビゲーションバーから、[Select a project] (プロジェクトの選択) を選択します。Google プラットフォームにプロジェクトが既にある場合は、このメニューには代わりにデフォルトのプロジェクトが表示されます。

  4. [NEW PROJECT] (新しいプロジェクト) を選択します。

  5. 製品の名前を入力し、[CREATE] (作成) を選択します。

  6. 左のナビゲーションバーで、[APIs and Services] (API とサービス) を選択し、[Oauth consent screen] (OAuth 同意画面) を選択します。

  7. アプリ情報、[App domain] (アプリドメイン)、[Authorized domains] (承認済みドメイン)、[Developer contact information] (開発者の連絡先情報) を入力します。[Authorized domains] (承認済みドメイン) には、amazoncognito.com とカスタムドメインのルート (例: example.com) を含める必要があります。[SAVE AND CONTINUE] (保存して続行) を選択します。

  8. 1. [Scopes] (スコープ) で、[Add or remove scopes] (スコープの追加または削除) を選択し、少なくとも、次の OAuth スコープを選択します。

    1. .../auth/userinfo.email

    2. .../auth/userinfo.profile

    3. openid

  9. [Test users] (テストユーザー) で、[Add users] (ユーザーの追加) を選択します。E メールアドレスおよびその他の承認済みテストユーザーを入力して、[SAVE AND CONTINUE] (保存して続行) を選択します。

  10. 左のナビゲーションバーを再度展開し、[APIs and Services] (API とサービス) を選択して、[Credentials] (認証情報) を選択します。

  11. [CREATE CREDENTIALS] (認証情報の作成)、[OAuth client ID] (OAuth クライアント ID) の順に選択します。

  12. [Application type] (アプリケーションタイプ) を選択し、クライアントに [Name] (名前) を入力します。

  13. [Authorized JavaScript origins] (承認済みの JavaScript 生成元) で、[ADD URI] (URI の追加) を選択します。ユーザープールのドメインを入力します。

    https://mydomain.us-east-1.amazoncognito.com
  14. [Authorized redirect URIs] (承認済みのリダイレクト URI) で、[ADD URI] (URI の追加) を選択します。ユーザープールのドメインの /oauth2/idpresponse エンドポイントへのパスを入力します。

    https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse
  15. [CREATE] (作成) を選択します。

  16. [Your client ID] (クライアント ID) と [Your client secret] (クライアントシークレット) の下に Google が表示する値を安全に保存します。Google IdP を追加するときに、Amazon Cognito にこれらの値を指定します。

「Apple でサインイン」の設定に関する最新の情報については、Apple デベロッパー向けドキュメントの「Apple でサインインの環境を設定する」を参照してください。

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

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

  3. 左のナビゲーションバーで、[Certificates, Identifiers & Profiles] (証明書、ID & プロファイル) を選択します。

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

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

  6. [Register a New Identifier] (新しい識別子の登録) ページで、[App IDs] (アプリ ID)、[Continue] (続行) の順に選択します。

  7. [Select a type] (種類の選択) ページで、[App] (アプリ) を選択し、[Continue] (続行) を選択します。

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

    1. [Description] (説明) で、説明を入力します。

    2. [App ID Prefix] (アプリ ID プレフィックス) に、[Bundle ID] (バンドル ID) を入力します。[App ID Prefix] (アプリケーション ID プレフィックス) にある値を書き留めておきます。この値は、ステップ 2: ユーザープールにソーシャル IdP を追加する で Apple を ID プロバイダーとして選択した後で使用します。

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

    4. [Sign in with Apple: App ID Configuration] (Apple でサインイン: アプリ ID の設定) ページで、アプリをプライマリとして設定するか、他のアプリ ID とグループ化するかを選択し、次に [Save] (保存) を選択します。

    5. [Continue] (続行) をクリックします。

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

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

  11. [Register a New Identifier] (新しい識別子の登録) ページで、[Services IDs] (サービス ID)、[Continue] (続行) の順に選択します。

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

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

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

    3. [Continue] (続行) を選択し、[Register] (登録) を選択します。

  13. [Identifiers] (識別子) ページから、先ほど作成した [Services ID] (サービス ID) を選択します。

    1. [Sign In with Apple] (Apple でサインイン) を選択後、[Configure] (設定) を選択します。

    2. [Web Authentication Configuration] (ウェブ認証の設定) ページで、[Primary App ID] (プライマリアプリ ID) として前に作成したアプリ ID を選択します。

    3. [Website URLs] (ウェブサイトの URL) の横の [+] アイコンを選択します。

    4. [Domains and subdomains] (ドメインとサブドメイン) で、https:// プレフィックスなしでユーザープールのドメインを入力します。

      mydomain.us-east-1.amazoncognito.com
    5. [Return URLs] (URL を返す) で、ユーザープールのドメインの /oauth2/idpresponse エンドポイントへのパスを入力します。

      https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse
    6. [Next] (次へ) を選択し、[Done] (完了) を選択します。ドメインを検証する必要はありません。

    7. [Continue] (続行) を選択し、次に [Save] (保存) を選択します。

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

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

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

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

    2. [Sign In with Apple] (Apple でサインイン) を選択後、[Configure] (設定) を選択します。

    3. [Configure Key] (キーの設定) ページで、プライマリアプリ ID として前に作成したアプリ ID を選択します。[Save] を選択します。

    4. [Continue] (続行) を選択し、[Register] (登録) を選択します。

  17. [Download Your Key] (鍵のダウンロード) ページで、[Download] (ダウンロード) をクリックしてプライベートキーをダウンロードしてから、表示される [Key ID] (キー ID) を書き留め、[Done] (完了) を選択します。このプライベートキーと、このページに表示されている [Key ID] (キー ID) の値は、ステップ 2: ユーザープールにソーシャル IdP を追加する で Apple を ID プロバイダーとして選択した後で必要になります。

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

AWS Management Console でユーザープールのソーシャル IdP を設定するには
  1. Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力します。

  2. [User Pools] (ユーザープール) を選択します。

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

  4. [Sign-in experience] (サインインエクスペリエンス) タブを選択します。[Federated sign-in] (フェデレーションサインイン) を探し、[Add an identity provider] (ID プロバイダーを追加する) を選択します。

  5. ソーシャル IdP ([Facebook][Google][Login with Amazon][Sign in with Apple]) を選択します。

  6. ソーシャル IdP の選択に基づいて、次のステップから選択します。

    • GoogleLogin with Amazon (Amazon でのログイン) — 前のセクションで生成された [app client ID] (アプリケーションクライアント ID) と [app client secret] (アプリケーションクライアントシークレット) を入力します。

    • Facebook — 前のセクションで生成された [app client ID] (アプリケーションクライアント ID) と [app client secret] (アプリケーションクライアントシークレット) を入力し、API バージョン (例えば、バージョン 2.12) を選択します。Facebook API の各バージョンにはライフサイクルとサポート終了日があるため、可能な限り最新のバージョンを選択することをお勧めします。Facebook のスコープと属性は API バージョンによって異なる場合があります。Facebook でソーシャル ID ログインをテストして、フェデレーションが意図したとおりに機能することを確認することをお勧めします。

    • Sign In with Apple (Apple でのサインイン) — 以前のセクションで作成された [Services ID] (サービス ID)、[Team ID] (チーム ID)、[Key ID] (キー ID) および [private key] プライベートキーを入力します。

  7. 使用したい [Authorized scopes] (承認するスコープ) の名前を入力します。スコープは、アプリでアクセスするユーザー属性 (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 のサインインページを離れるとエラーが発生する (Amazon Cognito の内部障害またはデベロッパーが記述したプログラムが原因である可能性があります)

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

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

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

  8. IdP からユーザープールに属性をマッピングします。詳細は、「ユーザープール用 ID プロバイダー属性マッピングの特定」を参照してください。

  9. [Create] (作成) を選択します。

  10. [App client integration] (アプリケーションクライアント統合) タブから、[App clients] (アプリケーションクライアント) のリストより 1 つ選択して、[Edit hosted UI settings] (ホストされた UI 設定の編集) をクリックします。[Identity providers] (ID プロバイダー) で、新しいソーシャル IdP をアプリクライアントに追加します。

  11. [Save changes] (変更の保存) をクリックします。

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

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

https://mydomain.us-east-1.amazoncognito.com/login?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com

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

注記

Amazon Cognito は 5 分以内に完了しない認証リクエストをキャンセルし、ホストされた UI にユーザーをリダイレクトします。ページには、Something went wrong というエラーメッセージが表示されます。