

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

# 使用 Connect Customer 對 SAML 進行故障診斷
<a name="troubleshoot-saml"></a>

本文說明如何疑難排解和解決客戶在搭配 Connect Customer 使用 SAML 時遇到的一些最常見問題。

如果您要疑難排解與其他身分提供者的整合，例如 Okta、PingIdentify、Azure AD 等，請參閱[連接客戶 SSO 設定研討會](https://catalog.workshops.aws/workshops/33e6d0e7-f927-4531-abb1-f28a86ba0872/en-US)。

## 錯誤訊息：存取遭拒 您的帳戶已通過身分驗證，但尚未加入此應用程式。
<a name="troubleshoot-saml-access-denied"></a>

![錯誤訊息：存取遭拒。](http://docs.aws.amazon.com/zh_tw/connect/latest/adminguide/images/saml-troubleshooting-access-denied.png)


### 這代表什麼意思？
<a name="troubleshoot-saml-access-denied-what"></a>

此錯誤代表使用者已成功透過身分驗證，使用 SAML 登入 AWS SAML 登入端點。不過，使用者無法在 Connect Customer 內進行比對/找到。這通常代表下列其中一項：
+ Connect Customer 中的使用者名稱與身分提供者傳回的 `RoleSessionName` SAML 回應中指定的 SAML 屬性不相符。
+ 使用者不存在於 Connect Customer 中。
+ 使用者有兩個透過 SSO 指派給他們的個別設定檔。

### Resolution
<a name="troubleshoot-saml-access-denied-resolution"></a>

使用下列步驟來檢查身分提供者傳回的 SAML 回應中指定的 RoleSessionName SAML 屬性，然後擷取並與 Connect Customer 中的登入名稱進行比較。

1. 針對端對端登入程序執行 HAR 擷取 (**H**TTP **封存**)。這會擷取來自瀏覽器端的網路請求。使用您偏好的檔案名稱儲存 HAR 檔案，例如 **saml.har**。

   如需說明，請參閱[如何從瀏覽器建立 AWS 支援案例的 HAR 檔案？](https://aws.amazon.com/premiumsupport/knowledge-center/support-case-browser-har-file/) 

1. 使用文字編輯器尋找 HAR 檔案中的 SAMLResponse 。或者，執行下列命令：

   `$ grep -o "SAMLResponse=.*&" azuresaml.har | sed -E 's/SAMLResponse=(.*)&/\1/' > samlresponse.txt`
   + 這會搜尋 HAR 檔案中的 SAMLresponse 並將它儲存至　**samlresponse.txt** 檔案。
   + 回應已經過 URL 編碼且內容為 Base64 編碼。

1. 使用第三方工具或簡單的指令碼，將 URL 回應解碼，然後將 Base64 內容解碼。例如：

   `$ cat samlresponse.txt | python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read()));" | base64 --decode > samlresponsedecoded.txt`

   此指令碼使用簡單的 python 命令，從 SAMLResponse 的原始 URL 編碼格式對其進行解碼。然後，它會對來自 Base64 的回應進行解碼，並以純文字格式輸出 SAML 回應。

1. 檢查解碼的回應以取得所需的屬性。例如，下圖說明如何檢查 `RoleSessionName`：  
![檢查角色名稱的 grep 命令。](http://docs.aws.amazon.com/zh_tw/connect/latest/adminguide/images/saml-troubleshooting-rolesessionname.png)

1. 檢查從上一個步驟傳回的使用者名稱是否以使用者身分存在於 Connect Customer 執行個體中：

   $ aws connect list-users --instance-id [INSTANCE\_ID] \| grep $username
   + 如果最終 grep 未傳回結果，則表示使用者不存在於 Connect Customer 執行個體中，或已使用不同的大小寫/大寫建立。
   + 如果您的 Connect Customer 執行個體有許多使用者，可能會分頁 ListUsers API 呼叫的回應。使用 API 傳回的 `NextToken` 以擷取其餘的使用者。如需詳細資訊，請參閱 [ListUsers](https://docs.aws.amazon.com/connect/latest/APIReference/API_ListUsers.html)。

### SAML 回應範例
<a name="example-samlresponse"></a>

下圖為 SAML 回應範例。在此案例中，身分提供者 (IdP) 為 Azure Active Directory (Azure AD)。

![SAML 回應範例。](http://docs.aws.amazon.com/zh_tw/connect/latest/adminguide/images/saml-troubleshooting-saml-response.png)


## 錯誤訊息：存取遭拒，請聯絡您的 AWS 帳戶管理員尋求協助。
<a name="troubleshoot-saml-contact-admin"></a>

![錯誤訊息：存取遭拒。](http://docs.aws.amazon.com/zh_tw/connect/latest/adminguide/images/saml-troubleshooting-access-denied-admin.png)


### 這代表什麼意思？
<a name="troubleshoot-saml-bad-request-what"></a>

使用者假設的角色已使用 SAML 成功透過身分驗證。不過，該角色沒有呼叫 GetFederationToken API for Connect Customer 的許可。此呼叫是必要的，因此使用者可以使用 SAML 登入您的 Connect Customer 執行個體。

### Resolution
<a name="troubleshoot-saml-bad-request-resolution"></a>

1. 將具有 `connect:GetFederationToken` 許可的政策連接至錯誤訊息中找到的角色。以下是政策範例：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Statement1",
               "Effect": "Allow",
               "Action": "connect:GetFederationToken",
               "Resource": [
                   "arn:aws:connect:ap-southeast-2:{{111122223333}}:instance/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/user/${aws:userid}"
               ]
           }
       ]
   }
   ```

------

1. 使用 IAM 主控台連接政策。或者，使用 attach-role-policy API，例如：

   `$ aws iam attach-role-policy —role-name [{{ASSUMED_ROLE}}] —policy_arn [{{POLICY_WITH_GETFEDERATIONTOKEN}}]`

## 錯誤訊息：工作階段過期
<a name="saml-sessionexpired-message"></a>

如果您在登入時看到**工作階段過期**訊息，則可能只需要重新整理工作階段記號。前往身分提供者並登入。重新整理 Connect Customer 頁面。如果您仍然收到此訊息，請聯絡您的 IT 團隊。