ユーザープールでの OIDC ID プロバイダーの使用 - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ユーザープールでの OIDC ID プロバイダーの使用

ユーザーは、OpenID Connect (OIDC) ID プロバイダー (IdP) の既存アカウントを使用してアプリケーションにサインインできます。OIDC プロバイダーを使用すると、独立したシングルサインオンシステムのユーザーは、アプリケーションがユーザープールの共有形式で OIDC トークンを受信する間、既存の認証情報を提供できます。OIDC IdP を設定するには、ユーザープールを RP として処理するように IdP を設定するとともに、ユーザープールを IdP として処理するようにアプリケーションを設定します。Amazon Cognito は、複数の OIDC IdP とアプリケーションの間の中間ステップとして機能します。ユーザープールは、プロバイダーがユーザープールに直接渡す ID トークンとアクセストークンのクレームに、属性マッピングルールを適用します。次に、Amazon Cognito は、マッピングされたユーザー属性と、Lambda トリガーを使用して認証フローに加えた追加の調整に基づいて、新しいトークンを発行します。

OIDC IdP でサインインするユーザーは、ユーザープールアプリケーションにアクセスするために、新しい認証情報や情報を提供する必要はありません。アプリケーションは、ユーザープールを使用して、サインインのために IdP にサイレントにリダイレクトできます。この場合、ユーザープールは、アプリケーションのトークン形式を標準化するバックグラウンドのツールとして使用されます。IdP リダイレクトの詳細については、「認可エンドポイント」を参照してください。

他のサードパーティー ID プロバイダーと同様に、アプリケーションを OIDC プロバイダーに登録し、ユーザープールに接続する IdP アプリケーションに関する情報を取得する必要があります。ユーザープール OIDC IdP には、クライアント ID、クライアントシークレット、リクエストするスコープ、プロバイダーサービスエンドポイントに関する情報が必要です。ユーザープールが検出エンドポイントからプロバイダーの OIDC エンドポイントを検出すできますが、ユーザーが手動で入力することもできます。また、プロバイダー ID トークンを調べ、IdP とユーザープール内の属性に関して属性マッピングを作成する必要があります。

OIDC ユーザープール IdP 認証フロー

この認証フローの詳細については、「OIDC ユーザープール IdP 認証フロー」を参照してください。

注記

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

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

前提条件

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

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

  • 次の設定を持つ 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、ECDSA または RSA アルゴリズムで ID トークンにのみ署名します。

    • キー ID kid クレームを jwks_uri  で発行し、そのトークンに kid クレームをフックみます。

    • 有効なルート CA トラストチェーンを持つ、有効期限が切れていないパブリックキーを表示します。

アプリケーションを OIDC IdP に登録する

OIDC IdP をユーザープール設定に追加してアプリケーションクライアントに割り当てる前に、OIDC クライアントアプリケーションを IdP に設定します。ユーザープールは、依拠しているパーティのアプリケーションとして、IdP を使用して認証を管理します。

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

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

    OpenID Connect ID プロバイダーとしての Salesforce

    https://MyDomainName.my.salesforce.com/.well-known/openid-configuration

    OneLogin OIDC 対応アプリケーションを接続する

    https://your-domain.onelogin.com/oidc/2/.well-known/openid-configuration

    JumpCloud OIDC による SSO

    https://oauth.id.jumpcloud.com/.well-known/openid-configuration

    Okta

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

    https://Your Okta subdomain.okta.com/.well-known/openid-configuration

    Microsoft Entra ID

    Microsoft ID プラットフォームでの OpenID Connect

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

    tenant の値には、テナント ID、commonorganizations、または consumers を含めることができます。

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

    https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
  3. ユーザーディレクトリとユーザープールで共有するスコープを選択します。OIDC IdP がユーザー情報を提供するには、スコープとして openid が必要です。email スコープは、email および email_verifiedクレームへのアクセスを付与するために必要です。OIDC 仕様のその他のスコープは、すべてのユーザー属性のための profile と、phone_number および phone_number_verified のための phone です。

  4. 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://mydomain.auth.us-east-1.amazoncognito.com/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://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
  8. スコープを選択します。スコープ openid を含める必要があります。email および email_verifiedクレームへのアクセスを許可するには、email スコープを追加します。スコープはスペースで区切ります。

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

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

ユーザープールに OIDC IdP を追加する

IdP を設定したら、OIDC IdP で認証リクエストを処理するようにユーザープールを設定できます。

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

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

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

  4. [ソーシャルプロバイダーと外部プロバイダー] メニューを選択し、[ID プロバイダーを追加] を選択します。

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

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

  7. IdP の [クライアント ID] を入力します。これは、OIDC IdP で構築するアプリケーションクライアントの ID です。指定するクライアント ID は、https://[your user pool domain]/oauth2/idpresponse のコールバック URL で設定した OIDC プロバイダーである必要があります。

  8. IdP の [クライアントシークレット] を入力します。これは、前のステップで入力したのと同じアプリケーションクライアントのクライアントシークレットである必要があります。

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

    IdP は、ユーザーがサインインするときに、これらの属性をアプリケーションに提供することに同意するようユーザーに求める場合があります。

  10. [属性のリクエストメソッド] を選択します。IdP は、userInfo エンドポイントへのリクエストを GET または POST の形式にするよう求める場合があります。例えば、Amazon Cognito の userInfo エンドポイントには HTTP GET リクエストが必要です。

  11. [セットアップ方法] で、IdP の主要な OIDC フェデレーションエンドポイントへのパスを、ユーザープールで決定する方法を選択します。通常、IdP は、発行者のベース URL で /well-known/openid-configuration エンドポイントをホストします。これが該当するプロバイダーの場合、[発行者 URL を通じた自動入力] オプションは、そのベース URL の入力を求め、そこから /well-known/openid-configuration パスへのアクセスを試み、表示されたエンドポイントを読み取ります。エンドポイントパスが通常とは異なっていたり、代替プロキシを介して 1 つ以上のエンドポイントにリクエストを渡したりする場合があります。その場合は、[手動入力] を選択し、authorizationtokenuserInfojwks_uri エンドポイントのパスを指定します。

    注記

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

    https://login.salesforce.com

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

  12. [OpenID Connect プロバイダーとユーザープール間の属性をマッピングする] で属性マッピングルールを設定します。ユーザープール属性は Amazon Cognito ユーザープロファイルの送信先属性であり、OpenID Connect 属性は ID トークンのクレームまたは userInfo レスポンスで Amazon Cognito が検索するソース属性です。Amazon Cognito は、OIDC クレーム sub を送信先ユーザープロファイルの username に自動的にマッピングします。

    詳細については、「IdP 属性をプロファイルとトークンにマッピングする」を参照してください。

  13. [ID プロバイダーを追加] を選択します。

  14. [アプリケーションクライアント] メニューで、リストからアプリケーションクライアントを選択します。[ログインページ] タブに移動し、[マネージドログインページの設定][編集] を選択します。[ID プロバイダー] を見つけ、新しい OIDC IdP を追加します。

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

API/CLI

CreateIdentityProvider の例 2 の OIDC 設定を参照してください。この構文を変更して、CreateIdentityProviderUpdateIdentityProvider のリクエスト本文として使用するか、create-identity-provider--cli-input-json 入力ファイルとして使用できます。

OIDC IdP の設定をテストする

アプリケーションでは、ユーザーが OIDC プロバイダーでサインインできるように、ユーザーのクライアントでブラウザを起動する必要があります。前のセクションのセットアップ手順を完了したら、プロバイダーを使用したサインインをテストします。次の URL の例では、プレフィックスドメインを持つユーザープールのサインインページをロードします。

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

このリンクは、[アプリケーションクライアント] メニューに移動してアプリケーションクライアントを選択し、[ログインページ] タブに移動して [ログインページを表示] を選択したときに、Amazon Cognito に表示されるページです。ユーザープールドメインの詳細については、「ユーザープールのドメインを設定する」を参照してください。クライアント ID とコールバック URL など、アプリケーションクライアントの詳細については、「アプリケーションクライアントによるアプリケーション固有の設定」を参照してください。

次のリンク例では、identity_provider クエリパラメータを使用して、認可エンドポイント から MyOIDCIdP プロバイダーへのサイレントリダイレクトを設定します。この URL は、マネージドログインによるインタラクティブなユーザープールのサインインをバイパスし、IdP サインインページに直接移動します。

https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?identity_provider=MyOIDCIdP&response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com