本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon Cognito 使用者集區SAML IdPs 中應了解的事項
2.0 SAML IdP 的實作隨附一些需求和限制。當您實作 IdP 時,請參閱本節。您也可以找到有助於在與使用者集區SAML聯合期間疑難排解錯誤的資訊。
- Amazon Cognito 會為您處理SAML宣告
-
Amazon Cognito SAML 使用者集區支援具有 POST繫結端點的 2.0 聯合。這樣就不需要您的應用程式擷取或剖析SAML宣告回應,因為使用者集區會透過使用者代理程式直接從 IdP 接收SAML回應。使用者集區會代表您的應用程式做為服務供應商 (SP)。Amazon Cognito 支援 SP 啟動和 IdP 啟動的單一登入 (SSO),如 SAML V2.0 技術概觀 的第 5.1.2 和 5.1.4 節所述。
- 提供有效的 IdP 簽署憑證
-
當您在使用者集區中設定 SAML IdP 時,SAML提供者中繼資料中的簽署憑證不得過期。
- 使用者集區支援多個簽署憑證
-
當您的 SAML IdP 在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 您的身分提供者要求您設定宣告消費者端點。您的 IdP 會使用其SAML聲明將使用者重新導向至此端點。在身分SAML提供者的使用者集區網域中設定下列端點的 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
-
您必須在服務供應商 (SP) 中將使用者集區 ID 提供給 IdP
urn
,也稱為對象URI或 SP 實體 ID。使用者集URI區的受眾格式如下。urn:amazon:cognito:sp:
us-east-1_EXAMPLE
您可以在 Amazon Cognito 主控台
中的使用者集區概觀下找到您的使用者集區 ID。 - 映射所有必要屬性
-
設定您的 SAML IdP,為使用者集區中設定為必要的任何屬性提供值。例如,
email
是使用者集區的常用必要屬性。您的 IdP SAML 宣告必須包含您映射至使用者集區屬性 的宣告,然後您的使用者才能登入email
。如需屬性對應的詳細資訊,請參閱 將 IdP 屬性映射至設定檔和權杖。 - 宣告格式具有特定要求
-
您的 SAML IdP 必須在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
中的urn:oasis:names:tc:SAML:1.1:nameid-format:persistent
表示您的 IdP 正在傳遞未變更的值。Amazon Cognito 不需要此格式宣告,urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
如果您的 IdP 未指定NameID
宣告的格式,則會指派 的格式。此行為符合 2.0 規格 的 2.2.2 複雜類型 NameIDType 章節。 SAML -
具有
Audience
值的AudienceRestriction
宣告,會將您的使用者集區 SP 實體 ID 設定為回應的目標。<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值,該InResponseTo
值與原始SAML請求 ID 相符。<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 SAML 簽署憑證的副本提供給 IdP。如果您未將 IdP 設定為接受簽署的SAML請求,IdP 可能會忽略使用者集區簽署的請求。
-
Amazon Cognito 會將數位簽章套用至您的使用者傳遞至 IdP 的SAML請求。您的使用者集區會簽署所有單一登出 (SLO) 請求,而且您可以將使用者集區設定為簽署任何SAML外部 IdP 的單一登入 (SSO) 請求。當您提供憑證的副本時,IdP 可以驗證使用者SAML請求的完整性。
-
您的 SAML IdP 可以使用加密憑證加密SAML回應。當您使用SAML加密設定 IdP 時,您的 IdP 只能傳送加密的回應。
-
- 編碼非英數字元
-
Amazon Cognito 不接受 4 位元組 UTF-8 字元,例如 😐 或 𠮷 您的 IdP 會作為屬性值傳遞。您可以對字元進行 Base64 編碼,將其作為文字傳遞,然後在應用程式中將其解碼。
在下列範例中,不會接受屬性宣告:
<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,例如「從 擷取中繼資料時發生錯誤<metadata endpoint>
," 請確定中繼資料端點已SSL正確設定,且具有與其相關聯的有效SSL憑證。如需驗證憑證的詳細資訊,請參閱什麼是 SSL/TLS 憑證?。 - 啟動 IdP 的應用程式用戶端SAML只能使用 登入 SAML
-
當您在應用程式用戶端中啟用支援 IdP 起始登入的 SAML 2.0 IdP 支援時,您只能將其他 SAML 2.0 IdPs 新增至該應用程式用戶端。您無法將使用者集區中的使用者目錄和所有非SAML外部身分提供者新增至以這種方式設定的應用程式用戶端。
- 登出回應必須使用POST繫結
-
/saml2/logout
端點接受LogoutResponse
作為HTTP POST
請求。使用者集區不接受具有HTTP GET
繫結的登出回應。