Amazon Cognito ユーザープールSAML IdPs で知っておくべきこと - Amazon Cognito

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

Amazon Cognito ユーザープールSAML IdPs で知っておくべきこと

2.0 SAML IdP の実装には、いくつかの要件と制限があります。IdP を実装する場合は、このセクションを参照してください。また、ユーザープールとのSAMLフェデレーション中のエラーのトラブルシューティングに役立つ情報もあります。

Amazon Cognito はSAMLアサーションを処理します

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

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

ユーザープールで IdP SAML を設定するときに、SAMLプロバイダーメタデータの署名証明書の有効期限が切れないようにする必要があります。

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

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

リレー状態パラメータを維持する

Amazon Cognito と IdP SAML は、 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 プロバイダーの 2.0 SAML 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アサーションには、以前の IdP レスポンスの ID を複製するアサーション ID があります。

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

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

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

ユーザープール ID は、Amazon Cognito コンソールユーザープールの概要にあります。

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

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

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

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

  • NameID クレーム。Amazon Cognito は、 によってSAMLアサーションを送信先ユーザーと関連付けますNameIDNameID 変更した場合、Amazon Cognito はアサーションを新しいユーザー用と見なします。IdP 設定NameIDで に設定する属性には永続的な値が必要です。SAML ユーザープール内の一貫したユーザープロファイルにユーザーを割り当てるには、変更されない値を持つ属性からNameIDクレームを割り当てます。

    <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:persistent"> carlos </saml2:NameID>

    の IdP NameIDクレームFormatの は、IdP が変更のない値を渡しているurn:oasis:names:tc:SAML:1.1:nameid-format:persistentことを示します。Amazon Cognito は、この形式の宣言を必要とせず、IdP urn:oasis:names:tc:SAML:1.1:nameid-format:unspecifiedNameIDクレームの形式を指定しない場合、 の形式を割り当てます。この動作は、2.0 仕様 のセクション 2.2.2 複合タイプ NameIDType に準拠しています。 SAML

  • ユーザープールの SP エンティティ ID をレスポンスのターゲットとして設定する値 Audience を含む AudienceRestriction クレーム。

    <saml:AudienceRestriction> <saml:Audience> urn:amazon:cognito:sp:us-east-1_EXAMPLE </saml:AudienceRestriction>
  • 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値を含めることはできません

  • ユーザープール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 はSAMLリクエストの URLパラメータにHTTP GETリクエストを含めます。SAML リクエストには、ACSエンドポイントを含むユーザープールに関する情報が含まれます。必要に応じて、これらのリクエストに暗号化署名を適用できます。

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

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

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

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

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

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

Amazon Cognito では、次のような 4 バイト UTF-8 文字は使用できません。😐 または 𠮷 IdP が属性値として渡すこと。文字を 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 メタデータエンドポイント を使用して SAML IdP を作成するInvalidParameterExceptionときに、URL「Error がメタデータを取得する <metadata endpoint>、「メタデータエンドポイントSSLが正しく設定されており、それに関連付けられている有効なSSL証明書があることを確認してください。証明書の検証の詳細については、「 SSL/TLS 証明書とは」を参照してください。

IdP 開始のアプリケーションクライアントは、 でのみサインインSAMLできます SAML

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

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

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