排解單一登入 (SSO) 的相關問題

當您選擇 Google 為服務供應商 (SP) 時,若您在整合 SAML 型單一登入 (SSO) 與 G Suite 或將兩者搭配使用時看到一般常見的錯誤訊息,請參考這份文件提供的解決步驟。

設定與啟用

「此網域尚未設定為使用 [單一登入]。」

這個錯誤通常代表您嘗試使用「單一登入」搭配 G Suite 標準版 (免費),但此版本目前不支援「單一登入」。如果您確定自己使用的是 G Suite 教育版或 ISP 專用 G Suite,請檢查識別資訊提供者設定,確認您已輸入正確的 G Suite 網域名稱。

「網域設定錯誤,因此無法存取這個帳戶,請稍後再試。」

這個錯誤表示 Google Apps 控制台中的單一登入設定不正確。請按照下列步驟修正問題:

  1. 在 Google 管理控制台,依序前往 [安全性] > [設定單一登入 (SSO)],然後勾選 [透過第三方識別資訊提供者設定 SSO] 方塊。
  2. 在對應的欄位中填入貴機構的登入網頁網址、登出網頁網址和變更密碼網頁網址。
  3. 在「驗證憑證」欄位中,選擇並上傳有效的驗證憑證檔案。
  4. 按一下 [儲存變更],接著請稍候片刻,讓變更生效,然後重新測試整合作業。

剖析 SAML 回應

「找不到必要的回應參數 SAMLResponse」

這個錯誤代表您的識別資訊提供者並未將特定的有效 SAML 回應提供給 Google,通常這是識別資訊提供者中的設定問題所致。

  • 請檢查您的識別資訊提供者紀錄,確認識別資訊提供者並未受到任何限制,可以正確地傳回 SAML 回應。
  • 請確認您的識別資訊提供者傳送給 G Suite 的 SAML 回應並未經過加密處理,G Suite 只接受未加密的 SAML 回應。Microsoft 的 Active Directory Federation Services 2.0 在預設狀態下經常會傳送加密的 SAML 回應,這點請特別留意。
「找不到必要的回應參數 RelayState」

SAML 2.0 規格要求識別資訊提供者從資源提供者 (例如 G Suite) 擷取及傳回 RelayState 網址參數。G Suite 會在 SAML 要求中將這個值提供給識別資訊提供者,而每次登入時提供的實際內容都不盡相同。在 SAML 回應中必須傳回完整的 RelayState,才能成功完成驗證。根據 SAML 標準規格,您的識別資訊提供者不可在登入程序中修改 RelayState。

  • 您可以在嘗試登入期間擷取 HTTP 標頭,進一步診斷問題。請從 HTTP 標頭擷取 SAML 要求與回應中的 RelayState,確認兩者的 RelayState 值相符。
  • 大多數市售或開放原始碼的 SSO 識別資訊提供者在預設狀態下都可以順利傳送 RelayState。為保障最佳安全性與可靠性,建議您使用這些現有的解決方案;我們無法為您的自訂 SSO 軟體提供支援。

SAML 回應內容

「由於您的登入要求含有無效的 [destination|audience|recipient] 資訊,因此無法存取這項服務。請登入後再試一次。」

這個錯誤表示 SAML 宣告中的 destination (目的地)、audience (目標對象) 或 recipient (收件人) 元素包含無效的資訊或沒有任何內容。SAML 宣告「必須」納入所有元素。請查看下表,瞭解各元素的說明與範例。

元素 <Audience>
說明 用於辨識指定目標對象的 URI,該對象需要 ACS URI 的值。注意:元素值不可為空白。
必要值 https://www.google.com/a/<yourdomain.com>/acs
範例

<saml:Conditions
NotBefore="2014-11-05T17:31:37Z"

NotOnOrAfter="2014-11-05T17:37:07Z"
<saml:AudienceRestriction>
<saml:Audience>https://wwww.google.com/a/yourdomain.com/acs<saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>

 

元素 <StatusResponseType> 類型的 Destination 屬性
說明 傳送 SAML 聲明的目的地 URI。這是選擇性屬性,但如果經過宣告,就需要 ACS URI 的值。
必要值 https://www.google.com/a/<yourdomain.com>/acs
範例

<saml:Response
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"

xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="7840062d379d82598d87ca04c8622f436bb03aa1c7"
Version="2.0"
IssueInstant="2014-11-05T17:32:07Z"

Destination+"https://wwww.google.com/a/yourdomain.com/acs
       InResponseTo="midihfjkfkpcmbmfhhoehbokhbkeapbbinldpeen">

 

元素 <SubjectConfirmationData> 的 Recipient 屬性
 
說明

Recipient 屬性會定義要接收 Subject 的
實體。

這是必要屬性,且必須含有 ACS URI。

注意:需區分大小寫。

 

必要

https://www.google.com/a/<yourdomain.com>/acs
 
範例

<saml:Subject>

<saml:NameID SPNameQualifier="google.com/a/yourdomain.com"

Format="urn:oasis:names:tc:SAML:2.0:nameid-format:email">user@yourdomain.com</saml:NameID>

<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">

<saml:SubjectConfirmationData NotOnOrAfter="2014-11-05T17:37:07Z"

Recipient="https://www.google.com/a/yourdomain.com/acs"

InResponseTo="midihfjkfkpcmbmfhjoehbokhbkeapbbinldpeen"

</saml:SubjectConfirmation> 

如要進一步瞭解所有必要元素,請參閱 SSO 宣告需求

「無法使用此服務,因為您的登入要求沒有包含收件人資訊。請登入後再試一次。」

這個錯誤通常表示您的識別資訊提供者傳送的 SAML 回應中缺少可讀取的 Recipient 值 (或 Recipient 值有誤);Recipient 值是 SAML 回應中的重要元件。

  1. 您可以在嘗試登入期間擷取 HTTP 標頭,進一步診斷問題。
  2. 從 HTTP 標頭擷取 SAML 要求和回應。
  3. 確認 SAML 回應中含有 Recipient 值,且該值與 SAML 要求中的值相符。

注意:這個錯誤訊息可能顯示為「您的登入要求含有無效的收件者資訊,因此無法存取這項服務。請登入後再試一次。」

「您的登入憑證未經驗證,因此無法存取這個帳戶。」

這個錯誤表示您用於簽署驗證程序的憑證發生問題。具體來說,這通常是由於用來簽署 SAML 回應的私密金鑰與 G Suite 紀錄中的公開金鑰憑證不符所致。

這個錯誤也可能表示您的 SAML 回應未包含可用的 Google 帳戶使用者名稱。G Suite 會剖析 SAML 回應,從中擷取名為 NameID 的 XML 元素,並預期這個元素中包含 G Suite 使用者名稱或完整的 G Suite 電子郵件地址。

  • 在您的 Google 管理控制台中,前往 [進階工具] > [設定單一登入] 存取您的 SSO 設定網頁。確認您使用的是有效憑證,並以 SSO 設定表單重新上載憑證。
  • 如果您在 NameID 元素中使用完整電子郵件地址 (使用 SSO 搭配多網域 Apps 環境時必須如此),請確認 NameID 元素的 Format 屬性指定使用完整電子郵件址,範例如下:Format="urn:oasis:names:tc:SAML:2.0:nameid-format:email"
  • 確認 NameID 元素中未填入有效使用者名稱或電子郵件地址以外的內容,例如資料庫 ID 欄位。如要確認已填入正確的內容,請擷取您傳送給 G Suite 的 SAML 回應,並檢查 NameID 元素的值是否正確。
  • 如果您的識別資訊提供者將 SAML 宣告加密,請停用加密並確認傳送給 Google 的宣告使用的是未加密格式,Google 管理控制台才能正確地讀取。
  • 確認 SAML 回應中只有標準 ASCII 字元。這個問題最常發生於 AttributeStatement 中的 DisplayName、GivenName 和 Surname 屬性。

例如:
<Attribute Name="http://schemas.microsoft.com/identity/claims/displayname">
<AttributeValue>Blüte, Eva</AttributeValue>
</Attribute>
<Attribute  
Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname">
<AttributeValue>Eva</AttributeValue>
</Attribute>
<Attribute  
Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname">
<AttributeValue>Blüte</AttributeValue>
</Attribute>

系統不支援這些屬性,因此可以省略。如果無法省略,
那麼這些屬性就只能包含標準 ASCII 字元。
 

「您的登入憑證已過期,因此無法存取這項服務。請登入後再試一次。」

基於安全性考量,SSO 登入程序必須在特定的時間範圍內完成,否則無法順利完成驗證。如果識別資訊提供者的時間設定錯誤,大多數或所有的登入嘗試都會被誤認為超過限定時間範圍,而導致驗證失敗並顯示上述錯誤訊息。

  • 請檢查識別資訊提供者伺服器的時間設定。這個錯誤多半都是因為識別資訊提供者的時間設定不正確,而導致 SAML 回應的時間戳記有誤所致。
  • 請將識別資訊提供者伺服器的時間設定與可靠的網際網路時間伺服器重新進行同步處理。作業環境中突然發生這類問題時,通常是因為上次同步處理失敗,導致伺服器時間變得不準確。重複執行時間同步作業 (儘可能選擇較可靠的時間伺服器) 即可迅速修復這類問題。
  • 如果您透過先前的登入嘗試重新傳送 SAML,也可能會發生這類問題。檢查您的 SAML 要求與回應 (可在登入嘗試期間從 HTTP 標頭紀錄擷取),能協助您進一步除錯。
「您的登入憑證尚未生效,因此無法存取這項服務。請登入後再試一次。」

基於安全性考量,SSO 登入程序必須在特定的時間範圍內完成,否則無法順利完成驗證。如果識別資訊提供者的時間設定錯誤,大多數或所有的登入嘗試都會被誤認為超過限定時間範圍,而導致驗證失敗並顯示上述錯誤訊息。

  • 請檢查識別資訊提供者伺服器的時間設定。這個錯誤多半都是因為識別資訊提供者的時間設定不正確,而導致 SAML 回應的時間戳記有誤所致。
  • 請將識別資訊提供者伺服器的時間設定與可靠的網際網路時間伺服器重新進行同步處理。作業環境中突然發生這類問題時,通常是因為上次同步處理失敗,導致伺服器時間變得不準確。只要重複執行時間同步作業 (請儘量選擇較可靠的時間伺服器) 即可迅速排解這類問題。
這對您有幫助嗎?
我們應如何改進呢?