翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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
パラメータを使用してセッション情報を維持します。-
Amazon Cognito は、80 バイトを超える
relayState
値をサポートします。SAML 仕様では、relayState
値が「長さが 80 バイトを超えてはならない」と記載されていますが、現在の業界慣行では、多くの場合、この動作から逸脱しています。その結果、80 バイトを超えるrelayState
値を拒否すると、多くの標準SAMLプロバイダー統合が中断されます。 -
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アサーションを送信先ユーザーと関連付けますNameID
。NameID
変更した場合、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 は、この形式の宣言を必要とせず、IdPurn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
がNameID
クレームの形式を指定しない場合、 の形式を割り当てます。この動作は、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 はユーザープールが署名したリクエストを無視することがあります。
-
Amazon Cognito は、ユーザーが IdP に渡すSAMLリクエストにデジタル署名を適用します。ユーザープールはすべての単一のログアウト (SLO) リクエストに署名し、任意のSAML外部 IdP のシングルサインオン (SSO) リクエストに署名するようにユーザープールを設定できます。証明書のコピーを提供すると、IdP はユーザーのSAMLリクエストの整合性を検証できます。
-
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
バインディングによるログアウトレスポンスを受け入れません。