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

ユーザープールへの OIDC ID プロバイダーの追加

ユーザーが OpenID Connect (OIDC) ID プロバイダー (IdP) のアカウントを既に持っている場合は、サインアップステップを省略して、既存のアカウントでアプリケーションにサインインすることをユーザーに許可できます。組み込みの Hosted Web UI では、Amazon Cognito がすべての認証済みユーザーに関するトークンの処理と管理を提供します。このように、バックエンドシステムは 1 セットのユーザープールトークンで標準化できます。


                OIDC IdP の認証の概要
注記

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

OIDC IdP の AWS Management Console のユーザープールへの追加は、AWS CLI を介して、またはユーザープール API メソッドの CreateIdentityProvider を使用して実行できます。

前提条件

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

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

  • 次の設定を持つ OIDC IdP。

    • client_secret_post クライアント認証をサポートします。Amazon Cognito は、IdP の OIDC ディスカバリエンドポイントでの token_endpoint_auth_methods_supported クレームをチェックしません。Amazon Cognito は、client_secret_basic クライアント認証をサポートしていません。クライアント認証の詳細については、OpenID Connect ドキュメントの「クライアント認証」を参照してください。

    • openid_configurationuserInfo、および jwks_uri などの OIDC エンドポイントにのみ HTTPS を使用します。

    • OIDC エンドポイントには TCP ポート 80 および 443 のみを使用します。

    • HMAC-SHA または RSA アルゴリズムで ID トークンにのみ署名します。

ステップ 1: OIDC IdP に登録する

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

OIDC IdP に登録する

  1. OIDC IdP のデベロッパーアカウントを作成します。

    OIDC IdP へのリンク
    OIDC IdP インストール方法 OIDC 検出 URL
    Salesforce

    Salesforce ID プロバイダーのインストール

    https://login.salesforce.com

    Ping Identity

    Ping Identity ID プロバイダーのインストール

    https://Ping ドメインアドレス:9031/idp/userinfo.openid

    例: https://pf.company.com:9031/idp/userinfo.openid

    Okta

    Okta ID プロバイダーのインストール

    https://Okta サブドメイン.oktapreview.com

    または https://Your Okta subdomain.okta.com

    Microsoft Azure Active Directory (Azure AD)

    Microsoft Azure AD ID プロバイダーのインストール

    https://login.microsoftonline.com/{tenant}/v2.0

    Google

    Google ID プロバイダーのインストール

    https://accounts.google.com

    注記

    Amazon Cognito では、Google を統合されたソーシャルサインイン IdP として提供します。統合された IdP を使用することをお勧めします。「ユーザープールへのソーシャル ID プロバイダーの追加」を参照してください。

  2. OIDC IdP を使用して、/oauth2/idpresponse エンドポイントを持つユーザープールドメインを登録します。そうすることで、OIDC IdP が後ほど、ユーザーの認証時に Amazon Cognito からこれを受け入れることが確実になります。

    https://<your-user-pool-domain>/oauth2/idpresponse
  3. コールバック URL を Amazon Cognito ユーザープールに登録します。これは、認証が成功した後で Amazon Cognito がユーザーをリダイレクトするページの URL です。

    https://www.example.com
  4. スコープを選択します。スコープ openid が必要です。email および email_verified クレームにアクセスを付与するには、email スコープが必要です。

  5. OIDC IdP は、クライアント ID とクライアントシークレットを提供します。これらは、ユーザープールで OIDC IdP を設定するときに使用します。

例: Salesforce を OIDC IdP としてユーザープールで使用する

OIDC 互換 IdP (Salesforce など) とユーザープールの間で信頼性を確立するときに OIDC IdP を使用します。

  1. Salesforce 開発者ウェブサイトでアカウントを作成します。

  2. 前のステップで設定した開発者アカウントを使用してサインインします。

  3. Salesforce ページで、次のいずれかの操作を行います。

    • Lightning Experience を使用している場合は、歯車アイコンを選択してから、[Setup Home] (ホームの設定) を選択します。

    • Salesforce Classic を使用しており、ユーザーインターフェイスのヘッダーに [Setup (設定)] が表示されている場合は、選択します。

    • Salesforce Classic を使用しており、ヘッダーに [Setup (設定)] が表示されていない場合は、上部のナビゲーションバーで名前を選択し、ドロップダウンリストより [Setup (設定)] を選択します。

  4. 左のナビゲーションバーで、[Company Settings (組織の設定)] を選択します。

  5. ナビゲーションバーで、[Domain] (ドメイン) を選択してドメインを入力し、[Create] (作成) を入力します。

  6. 左のナビゲーションバーで、[Platform Tools] (プラットフォームツール) に移動し、[Apps] (アプリケーション) を選択します。

  7. [アプリケーションマネージャ] を選択します。

    1. [New connected app] (新規接続アプリケーション) を選択します。

    2. 必須フィールドに入力します。

      [Start URL] (開始 URL) で、Salesforce IdP でサインインするユーザープールドメインの /authorize エンドポイントの URL を入力します。ユーザーが接続アプリケーションにアクセスすると、Salesforce はこの URL に誘導してサインインを完了します。次に、Salesforce はユーザーをアプリクライアントに関連付けたコールバック URL にリダイレクトします。

      https://<your_user_pool_domain>/authorize?response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com&identity_provider=CorpSalesforce
    3. OAuth 設定を有効にし、コールバック URL にユーザープールドメインの /oauth2/idpresponse エンドポイントの URL を入力します。これは、Amazon Cognito が OAuth トークンと交換する認証コードを Salesforce が発行する URL です。

      https://<your_user_pool_domain>/oauth2/idpresponse
  8. スコープを選択します。スコープ openid を含める必要があります。email および email_verified クレーム にアクセスを付与するには、email スコープが必要です。スコープはスペースで区切ります。

  9. [Create] を選択します。

    Salesforce では、クライアント ID は [コンシューマーキー]、クライアントシークレットは [コンシューマーシークレット] と呼ばれます。クライアント ID とクライアントシークレットを書き留めます。これらは次のセクションで使用します。

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

このセクションでは、OIDC IdP からの OIDC ベースの認証リクエストを処理するようにユーザープールを設定します。

OIDC IdP を追加する (Amazon Cognito コンソール)

Original console
  1. Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力します。

  2. ユーザープールの管理

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

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

  5. [OpenId Connect] を選択します。

  6. [Provider name] (プロバイダー名) に一意の名前を入力します。

  7. 前のセクションで取得した OIDC IdP クライアント ID を [Client ID] (クライアント ID) に入力します。

  8. 前のセクションで取得したクライアントシークレットを [Client secret] (クライアントシークレット) に入力します。

  9. ドロップダウンリストから HTTP メソッド (GET または POST) を選択します。このメソッドにより、[userinfo] (ユーザー情報) エンドポイントから [Attributes request method] (属性リクエストメソッド) にユーザーの詳細を取り込みます。

  10. 承認するスコープの名前を入力します。スコープは、アプリケーションにアクセスするためのユーザー属性 (nameemail など) を定義します。各スコープは、OAuth 2.0 仕様に従ってスペースで区切ります。

    アプリユーザーは、これらの属性をアプリケーションに提供するよう同意を求められます。

  11. IdP の URL を入力し、[Run discovery] (検出の実行) を選択します。

    注記

    URL は、https:// で始める必要があり、末尾にスラッシュ (/) を使用することはできません。この URL では、ポート番号 443 および 80 のみを使用できます。例えば、Salesforce では次の URL を使用します。

    https://login.salesforce.com

    1. [Run discovery (検出の実行)] が失敗した場合は、[Authorization endpoint (許可エンドポイント)]、[Token endpoint (トークンエンドポイント)]、[Userinfo endpoint (ユーザー情報エンドポイント)]、および [Jwks uri] (JSON ウェブキーの場所) を指定する必要があります。

    注記

    プロバイダーがフェデレーションログインに検出を使用する場合、検出ドキュメントは authorization_endpointtoken_endpointuserinfo_endpoint、および jwks_uri の値に HTTPS を使用する必要があります。そうしない場合は、ログインが失敗します。

  12. [プロバイダーの作成] を選択します。

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

  14. 前のステップで設定した OIDC プロバイダーを、[有効な ID プロバイダー] の 1 つとして選択します。

  15. ユーザーが認証された後で呼び出す Amazon Cognito 認証サーバーのコールバック URL を入力します。これは、ユーザーが認証に成功した後でリダイレクトされるページの URL です。

    https://www.example.com
  16. [許可されている OAuth フロー] で、[Authorization code grant (認証コード付与)] と [Implicit code grant (暗黙的コード付与)] の両方を有効にします。

    具体的に除外する必要がない限り、すべての [許可されている OAuth スコープ] のチェックボックスをオンにします。

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

  18. 左のナビゲーションバーの [属性マッピング] タブで、OIDC クレームのマッピングをユーザープール属性に追加します。

    1. デフォルトとして、OIDC クレームの [sub] はユーザープール属性の [ユーザー名] にマッピングされます。他の OIDC クレームをユーザープール属性にマッピングできます。OIDC クレームを入力し、対応するユーザープール属性をドロップダウンリストから選択します。たとえば、通常、クレームの [email] はユーザープール属性の [E メール] にマッピングされます。

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

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

    4. [要約に移動] を選択します。

New console
  1. Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力します。

  2. ナビゲーションメニューから [User Pools] (ユーザープール) を選択します。

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

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

  5. [OpenID Connect] IdP を選択します。

  6. [Provider name] (プロバイダー名) に一意の名前を入力します。

  7. プロバイダーから受け取ったクライアント ID を、[Client ID] (クライアント ID) へ入力します。

  8. プロバイダーから受け取ったクライアントシークレットを、[Client secret] (クライアントシークレット) に入力します。

  9. このプロバイダーの [Authorized scopes] (承認済みスコープ) を入力します。スコープは、アプリケーションがプロバイダーにリクエストするユーザー属性のグループ(name および email など)を定義します。OAuth 2.0 仕様に従い、スコープはスペースで区切る必要があります。

    ユーザーはこれらの属性をアプリケーションに提供することに同意を求められます。

  10. [Attribute request method] (属性リクエストメソッド) を選択して、プロバイダーが操作する [userInfo] エンドポイントからユーザーの詳細をフェッチするために必要な HTTP メソッド(GET または POST)を Amazon Cognito に提供します。

  11. [Setup method] (セットアップ方法) を選択して、OpenID Connect エンドポイントを、[Auto fill through issuer URL] (発行者 URL による自動入力) または [Manual input] (手動入力) で取得します。[Auto fill through issuer URL] (発行者 URL による自動入力) は、Amazon Cognito が authorizationtokenuserInfo、および jwks_uri エンドポイントの URL を取得できるパブリック .well-known/openid-configuration エンドポイントを、プロバイダーが持っている場合に使用します。

  12. 発行者の URL、または IdP からの authorizationtokenuserInfo、および jwks_uri エンドポイントの URLを入力します。

    注記

    URL は、https:// で始める必要があり、末尾にスラッシュ (/) を使用することはできません。この URL では、ポート番号 443 および 80 のみを使用できます。例えば、Salesforce では次の URL を使用します。

    https://login.salesforce.com

    自動入力を選択した場合、検出ドキュメントは authorization_endpointtoken_endpointuserinfo_endpoint、および jwks_uri の値に HTTPS を使用する必要があります。そうしない場合は、ログインが失敗します。

  13. デフォルトで、OIDC クレームの [sub] (サブ) はユーザープール属性の [Username] (ユーザーネーム) にマッピングされます。他の OIDC クレームをユーザープール属性にマッピングできます。OIDC クレームを入力し、対応するユーザープール属性をドロップダウンリストから選択します。たとえば、通常、クレームの [email] はユーザープール属性の [E メール] にマッピングされます。

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

  15. [Create] を選択します。

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

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

OIDC IdP を追加するには (AWS CLI)

  • CreateIdentityProvider API メソッドのパラメータに関する説明を参照してください。

    aws cognito-idp create-identity-provider --user-pool-id string --provider-name string --provider-type OIDC --provider-details map --attribute-mapping string --idp-identifiers (list) --cli-input-json string --generate-cli-skeleton string

    このプロバイダー詳細のマップを使用します。

    { "client_id": "string", "client_secret": "string", "authorize_scopes": "string", "attributes_request_method": "string", "oidc_issuer": "string", "authorize_url": "string", "token_url": "string", "attributes_url": "string", "jwks_uri": "string" }

ステップ 3: OIDC IdP の設定をテストする

前の 2 つのセクションの要素を使用して認証 URL を作成し、OIDC IdP の設定をテストできます。

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

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