翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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
パラメータで管理します。-
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 プロバイダーの 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 アサーションに次のクレームを含める必要があります。
-
NameID
クレーム。Amazon Cognito は、 によって SAML アサーションを送信先ユーザーに関連付けますNameID
。NameID
変更した場合、Amazon Cognito はアサーションを新しいユーザー用と見なします。IdP 設定NameID
で に設定する属性には、永続的な値が必要です。<saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:persistent"> carlos </saml2:NameID>
-
ユーザープールの 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 は
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 リクエストを無視することがあります。
-
Amazon Cognito は、ユーザーが IdP に渡す SAML リクエストにデジタル署名を適用します。ユーザープールはすべてのシングルログアウト (SLO) リクエストに署名し、SAML 外部 IdP のシングルサインオン (SSO) リクエストに署名するようにユーザープールを設定できます。証明書のコピーを提供すると、IdP はユーザーの SAML リクエストの整合性を検証できます。
-
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
インディングによるログアウトレスポンスを受け入れません。