在 Amazon Cognito 使用者集區SAML IdPs 中應了解的事項 - Amazon Cognito

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 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 參數維護工作階段資訊。

  1. Amazon Cognito 支援大於 80 個位元組的 relayState 值。雖然SAML規格指出relayState值「長度不得超過 80 個位元組」,但目前的產業實務通常偏離此行為。因此,拒絕大於 80 個位元組relayState的值會中斷許多標準SAML提供者整合。

  2. 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 提供給 IdPurn,也稱為對象URISP 實體 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 可能會忽略使用者集區簽署的請求。

  1. Amazon Cognito 會將數位簽章套用至您的使用者傳遞至 IdP 的SAML請求。您的使用者集區會簽署所有單一登出 (SLO) 請求,而且您可以將使用者集區設定為簽署任何SAML外部 IdP 的單一登入 (SSO) 請求。當您提供憑證的副本時,IdP 可以驗證使用者SAML請求的完整性。

  2. 您的 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繫結的登出回應。