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

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

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

ウェブおよびモバイルアプリのユーザーに、Microsoft Active Directory フェデレーションサービス (ADFS) や Shibboleth などの SAML ID プロバイダー (IdP ) 経由でサインインさせるように選択できます。 https://msdn.microsoft.com/en-us/library/bb897402.aspxSAML 2.0 標準をサポートする SAML IdP を選択します。

ホストされた UI とフェデレーションエンドポイントを使用すると、Amazon Cognito はローカルおよびサードパーティーの IdP ユーザーを認証し、JSON ウェブトークン (JWTs。Amazon Cognito が発行するトークンを使用すると、複数の ID ソースをすべてのアプリでユニバーサル OpenID Connect (OIDC) 標準に統合できます。Amazon Cognito は、サードパーティープロバイダーからの SAML アサーションをその SSO 標準に処理できます。SAML IdP は、 AWS Management Console、、 AWS CLIまたは Amazon Cognito ユーザープール API を使用して作成および管理できます。で最初の SAML IdP を作成するには AWS Management Console、「」を参照してくださいユーザープールでの SAML ID プロバイダーの追加と管理


                SAML サインインの認証の概要
注記

サードパーティー IdP を介したサインインによるフェデレーションは、Amazon Cognito ユーザープールの機能です。Amazon Cognito フェデレーティッド ID と呼ばれることもありますが、Amazon Cognito ID プールはフェデレーションの実装であり、各 ID プールで個別に設定する必要があります。ユーザープールは、ID プールのサードパーティー IdP にすることができます。詳細については、「Amazon Cognito アイデンティティプール」を参照してください。

IdP 設定のクイックリファレンス

リクエストを受け入れてユーザープールにレスポンスを送信するように SAML IdP を設定する必要があります。SAML IdP のドキュメントには、SAML 2.0 IdP の証明書利用者またはアプリケーションとしてユーザープールを追加する方法に関する情報が含まれています。次のドキュメントには、SP エンティティ ID とアサーションコンシューマーサービス (ACS) URL に対して指定する必要がある値が記載されています。

ユーザープールの SAML 値のクイックリファレンス
SP エンティティ ID
urn:amazon:cognito:sp:us-east-1_EXAMPLE
ACS URL
https://Your user pool domain/saml2/idpresponse

ID プロバイダーをサポートするようにユーザープールを設定する必要があります。外部 SAML IdP を追加する大まかな手順は次のとおりです。

  1. IdP から SAML メタデータをダウンロードするか、メタデータエンドポイントへの URL を取得します。サードパーティーの SAML ID プロバイダーの設定 を参照してください。

  2. ユーザープールに新しい IdP を追加します。SAML メタデータをアップロードするか、メタデータ URL を指定します。ユーザープールでの SAML ID プロバイダーの追加と管理 を参照してください。

  3. アプリクライアントに IdP を割り当てます。「ユーザープールアプリクライアント」を参照

Amazon Cognito ユーザープール IdPs の SAML について知っておくべきこと

Amazon Cognito が SAML アサーションを処理する

Amazon Cognito ユーザープールは、POST バインドエンドポイントで SAML 2.0 フェデレーションをサポートします。これにより、ユーザープールがユーザーエージェント経由で IdP から直接 SAML レスポンスを受信するため、アプリケーションで SAML アサーションレスポンスを受信して解析する必要がなくなります。ユーザープールはアプリケーションのためのサービスプロバイダー (SP) として機能します。Amazon Cognito は、SAML V2.0 技術概要のセクション 5.1.2 および 5.1.4 で説明されているように、SP 開始および IdP 開始のシングルサインオン (SSO) をサポートしています。

有効な IdP 署名証明書を提供する

SAML プロバイダーメタデータの署名証明書は、ユーザープールで SAML IdP を設定する場合、またはユーザーが SAML 2.0 で認証する場合、期限切れにしないでください。

ユーザープールが複数の署名証明書をサポート

SAML IdP の SAML メタデータに複数の署名証明書が含まれている場合、サインイン時に、SAML アサーションが SAML メタデータ内のいずれかの証明書と一致すると、ユーザープールは SAML アサーションが有効であると判断します。各署名証明書の長さは 4,096 文字以下にする必要があります。

リレーステートパラメータの維持

Amazon Cognito と SAML IdP は、セッション情報を relayState パラメータで管理します。

  1. Amazon Cognito は、80 バイトを超える relayState 値をサポートします。SAML 仕様では、relayState の値は「長さが 80 バイトを超えてはならない」と規定されていますが、現在の業界の慣行はこの動作から外れていることがよくあります。その結果、80 バイトを超える relayState 値を拒否すると、多くの標準的な SAML プロバイダーの統合は壊れます。

  2. relayState トークンは、Amazon Cognito によって維持される状態情報への不透明な参照です。Amazon Cognito は relayState パラメータの内容を保証しません。その内容を解析してアプリケーションでその結果に依存することは避けてください。詳細については、「SAML 2.0 の仕様」を参照してください。

ACS エンドポイントを特定する

SAML ID プロバイダーは、アサーションコンシューマーエンドポイントを設定することを要求します。IdP は、SAML アサーションを使用して、このエンドポイントにユーザーをリダイレクトします。SAML ID プロバイダーの SAML 2.0 POST バインド用に、ユーザープールドメインで次のエンドポイントを設定します。

https://Your user pool domain/saml2/idpresponse With an Amazon Cognito domain: https://mydomain.us-east-1.amazoncognito.com/saml2/idpresponse With a custom domain: https://auth.example.com/saml2/idpresponse

ユーザープールドメインの詳細については、「ユーザープールのドメインを設定する」を参照してください。

リプレイされたアサーションなし

Amazon Cognito saml2/idpresponse エンドポイントに対して SAML アサーションを繰り返したり、再生したりすることはできません。SAML アサーションを作成すると、そのアサーション ID は以前の IdP レスポンスの ID と重複します。

ユーザープール ID は SP エンティティ ID です

オーディエンス URI または SP エンティティ ID とも呼ばれurnるサービスプロバイダー (SP) のユーザープール ID を IdP に提供する必要があります。ユーザープールのオーディエンス URI の形式は次のとおりです。

urn:amazon:cognito:sp:us-east-1_EXAMPLE

ユーザープール ID は、Amazon Cognito コンソールユーザープールの概要で確認できます。

すべての必須属性をマッピングする

ユーザープールで必須として設定した属性の値を入力するように SAML IdP を設定します。例えば、email はユーザープールの一般的な必須属性です。ユーザーがサインインする前に、ユーザープール属性 email にマッピングするクレームを SAML IdP アサーションに含める必要があります。属性のマッピングの詳細については、「ユーザープールの ID プロバイダー属性マッピングを指定する」を参照してください。

アサーション形式には特定の要件があります

SAML IdP は、SAML アサーションに次のクレームを含める必要があります。

  1. NameID クレーム。Amazon Cognito は、 によって SAML アサーションを送信先ユーザーに関連付けますNameIDNameID 変更された場合、Amazon Cognito はアサーションを新しいユーザー用と見なします。IdP 設定NameIDで に設定する属性には、永続的な値が必要です。

    <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:persistent"> carlos </saml2:NameID>
  2. ユーザープールの SP エンティティ ID をレスポンスのターゲットとして設定する値 Audience を含む AudienceRestriction クレーム。

    <saml:AudienceRestriction> <saml:Audience> urn:amazon:cognito:sp:us-east-1_EXAMPLE </saml:AudienceRestriction>
  3. SP 開始のシングルサインオンの場合、元の SAML リクエスト ID の InResponseTo値を持つ Response要素。

    <saml2p:Response Destination="https://mydomain.us-east-1.amazoncognito.com/saml2/idpresponse" ID="id123" InResponseTo="_dd0a3436-bc64-4679-a0c2-cb4454f04184" IssueInstant="Date-time stamp" Version="2.0" xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    注記

    IdP が開始する SAML アサーションに InResponseTo値を含めることはできません

  4. ユーザープールsaml2/idpresponseエンドポイントRecipientの値を持つ SubjectConfirmationData要素。SP 開始 SAML の場合は、元の SAML リクエスト ID と一致する InResponseTo値。

    <saml2:SubjectConfirmationData InResponseTo="_dd0a3436-bc64-4679-a0c2-cb4454f04184" NotOnOrAfter="Date-time stamp" Recipient="https://mydomain.us-east-1.amazoncognito.com/saml2/idpresponse"/>
SP 開始サインインリクエスト

認可エンドポイント がユーザーを IdP サインインページにリダイレクトすると、Amazon Cognito は HTTP GET リクエストの URL パラメータに SAML リクエストを含めます。SAML リクエストには、ACS エンドポイントなど、ユーザープールに関する情報が含まれています。オプションで、これらのリクエストに暗号化署名を適用できます。

リクエストに署名し、レスポンスを暗号化する

SAML プロバイダーを使用するすべてのユーザープールは、Amazon Cognito が SAML リクエストに割り当てるデジタル署名用の非対称キーペアと署名証明書を生成します。暗号化された SAML レスポンスをサポートするように設定したすべての外部 SAML IdP により、Amazon Cognito はそのプロバイダーの新しいキーペアと暗号化証明書を生成します。パブリックキーを使用して証明書を表示およびダウンロードするには、Amazon Cognito コンソールのサインインエクスペリエンスタブで IdP を選択します。

ユーザープールからの SAML リクエストとの信頼を確立するには、ユーザープール SAML 2.0 署名証明書のコピーを IdP に提供します。署名付きリクエストを受け入れるように IdP を設定しない場合、IdP はユーザープールが署名した SAML リクエストを無視することがあります。

  1. Amazon Cognito は、ユーザーが IdP に渡す SAML リクエストにデジタル署名を適用します。ユーザープールはすべてのシングルログアウト (SLO) リクエストに署名し、任意の SAML 外部 IdP のシングルサインオン (SSO) リクエストに署名するようにユーザープールを設定できます。証明書のコピーを提供すると、IdP はユーザーの SAML リクエストの整合性を検証できます。

  2. SAML IdP は、暗号化証明書を使用して SAML レスポンスを暗号化できます。SAML 暗号化を使用して IdP を設定する場合、IdP は暗号化されたレスポンスのみを送信する必要があります。

英数字以外の文字をエンコードする

Amazon Cognito は、IdP が属性値として渡す 😐や TAK��� などの 4 バイトの UTF-8 文字を受け入れません。文字を Base 64 にエンコードしてテキストとして渡し、アプリでデコードできます。

次の例では、属性のクレームは受け付けられません。

<saml2:Attribute Name="Name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">😐</saml2:AttributeValue> </saml2:Attribute>

上記の例とは対照的に、次の属性のクレームは受け付けられます。

<saml2:Attribute Name="Name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">8J+YkA==</saml2:AttributeValue> </saml2:Attribute>
メタデータエンドポイントには、トランスポートレイヤーの有効なセキュリティが必要です

HTTPS メタデータエンドポイント URL を使用して SAML IdP を作成中に InvalidParameterException (例えば「Error retrieving metadata from <metadata endpoint>」) が表示される場合、メタデータエンドポイントの SSL が正しくセットアップされていること、および有効な SSL 証明書が関連付けられていることを確認してください。証明書の検証の詳細については、「SSL/TLS 証明書とは」を参照してください。

IdP が開始する SAML を持つアプリクライアントは、SAML でのみサインインできます

アプリクライアントで IdP 開始サインインをサポートする SAML 2.0 IdP のサポートをアクティブ化すると、 IdPs そのアプリクライアントに追加できるのは他の SAML 2.0 のみです。この方法で設定されたアプリクライアントに、ユーザープールすべての非 SAML 外部 ID プロバイダーにユーザーディレクトリを追加することはできません。

SAML ユーザー名の大文字と小文字の区別

フェデレーティッドユーザーがサインインしようとすると、SAML ID プロバイダー (IdP ) はユーザーの SAML アサーションで Amazon Cognito NameIdに一意の を渡します。Amazon Cognito は、SAML フェデレーティッドユーザーを NameId クレームによって識別します。ユーザープールの大文字と小文字を区別する設定に関係なく、Amazon Cognito は一意で大文字と小文字を区別するNameIdクレームを渡すときに、SAML IdP から返されるフェデレーティッドユーザーを認識します。email のような属性を NameId にマッピングし、ユーザーが E メールアドレスを変更すると、アプリケーションにサインインできません。

変更されない値を持つ IdP 属性から SAML アサーションに NameId をマッピングします。

例えば、Carlos は、Carlos@example.comNameId 値を渡した Active Directory フェデレーションサービス (ADFS) SAML アサーションからの大文字と小文字を区別しないユーザープールにユーザープロファイルを持っているとします。次回 Carlos がサインインしようとすると、ADFS IdP は carlos@example.comNameId 値を渡します。NameId は大文字と小文字が完全に一致する必要があるため、サインインは成功しません。

NameID を変更した後、ユーザーがログインできない場合は、ユーザープールからそのユーザーのプロファイルを削除してください。Amazon Cognito は、次回サインインしたときに新しいユーザープロファイルを作成します。