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

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

ユーザーが OpenID Connect (OIDC) ID プロバイダー (IdPs) (SalesforcePing Identity など) のアカウントを既に持っている場合、サインアップステップを省略し、既存のアカウントでアプリケーションにサインインすることを許可します。組み込みのホストされたウェブ UI の場合、Amazon Cognito は、すべての認証済みユーザーのトークンを処理して管理します。したがって、バックエンドシステムが標準とするユーザープールのトークンセットは 1 つです。


                OIDC IdP の認証の概要
注記

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

ユーザープールに OIDC IdP を追加するには、AWS マネジメントコンソール、AWS CLI、またはユーザープールの API メソッド CreateIdentityProvider を使用できます。

前提条件

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

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

  • OIDC IdP。

ステップ 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.windows.net/common

    Google

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

    https://accounts.google.com

    注記

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

  2. OIDC IdP を使用して、/oauth2/idpresponse エンドポイントを持つユーザープールドメインを登録します。これにより、OIDC IdP が後でユーザーを認証するときに、この URL を Amazon Cognito から受け取ります。

    https://<your-user-pool-domain>/oauth2/idpresponse
  3. コールバック URL を 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 ID プロバイダーを使用します。

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

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

  3. Salesforce ページの上部を参照します。

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

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

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

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

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

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

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

    1. [new connected app (新規接続アプリ)] を選択します。

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

      [Start URL (開始 URL)] に、/oauth2/idpresponse エンドポイントを含むユーザープールのドメイン URL を入力します。

      https://<your-user-pool-domain>/oauth2/idpresponse
    3. [OAuth settings (OAuth 設定)] を有効にし、コールバック URL を [Callback URL (コールバック URL)] に入力します。これは、ユーザーがサインインに成功した後でリダイレクトされるページの URL です。

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

    各スコープはスペースで区切ります。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    たとえば、Salesforce では次の URL を使用します。

    https://login.salesforce.com

    注記

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

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

  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. [要約に移動] を選択します。

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 です。