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

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

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 IdP を設定するときに、SAML プロバイダーメタデータの署名証明書の有効期限が切れないようにしてください。

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

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

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

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

ユーザープール ID は、Amazon Cognito コンソールのユーザープールの概要にあります。 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 が属性値として渡す 😐や ���などの 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 プロバイダーにユーザーディレクトリを追加することはできません。

ログアウトレスポンスは POST バインディングを使用する必要があります

/saml2/logout エンドポイントは をHTTP POSTリクエストLogoutResponseとして受け入れます。ユーザープールは、バHTTP GETインディングによるログアウトレスポンスを受け入れません。