View a markdown version of this page

使用 Connect 客户对 SAML 进行故障排除 - Amazon Connect Customer

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Connect 客户对 SAML 进行故障排除

本文介绍如何排除和解决客户在将 SAML 与 Connect Customer 配合使用时遇到的一些最常见的问题。

如果您要对与其他身份提供商(例如 Okta、 PingIdentify、Azure AD 等)的集成进行故障排除,请参阅 Connect 客户 SSO 安装研讨会

错误消息:访问被拒绝。您的账户已经过身份验证,但尚未登入此应用程序。

错误消息:访问被拒绝。

这意味着什么?

此错误表示用户已使用 SAML 成功向 AWS SAML 登录端点进行身份验证。但是,用户不能在 Connect Customer matched/found 内部。此消息通常提示出现以下问题之一:

  • Connect Customer 中的用户名与身份提供者返回的 RoleSessionName SAML 响应中指定的 SAML 属性不匹配。

  • 该用户在 Connect Customer 中不存在。

  • 通过 SSO 为用户分配了两个单独的配置文件。

解决方案

使用以下步骤检查身份提供者返回的 RoleSessionName SAML 响应中指定的 SAML 属性,然后检索登录名并将其与 Connect Customer 中的登录名进行比较。

  1. 为端到端登录过程执行 HAR 捕获 (HTTP ARchive)。这将从浏览器端捕获网络请求。使用首选文件名保存 HAR 文件,例如 saml.har

    有关说明,请参阅如何通过浏览器为 Support 案例创建 HAR 文件? AWS

  2. 使用文本编辑器在 HAR 文件中查找 SAML 响应。或者,运行以下命令:

    $ grep -o "SAMLResponse=.*&" azuresaml.har | sed -E 's/SAMLResponse=(.*)&/\1/' > samlresponse.txt

    • 这将在 HAR 文件中搜索 SAML 响应,并将其保存到 samlresponse.txt 文件中。

    • 响应采用 URL 编码,而内容采用 Base64 编码。

  3. 对 URL 响应进行解码,然后使用第三方工具或简单脚本解码 Base64 内容。例如:

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

    此脚本使用简单的 python 命令从原始 URL 编码格式解码 SAMLResponse。然后,它解码来自 Base64 的响应,并以纯文本格式输出 SAML 响应。

  4. 检查所需属性的解码响应。例如,下图显示如何检查 RoleSessionName

    用于检查 rolesessionname 的 grep 命令。
  5. 检查上一步中返回的用户名是否作为用户存在于您的 Connect Customer 实例中:

    $ aws connect list-users --instance-id [INSTANCE_ID] | grep $username

    • 如果最终的 grep 没有返回结果,则表示该用户不存在于您的 Connect Customer 实例中,或者该用户是使用不同的 case/capitalization实例创建的。

    • 如果您的 Connect Customer 实例有许多用户,那么 ListUsers API 调用的响应可能会分页。使用由此 API 返回的 NextToken 获取其余用户。有关更多信息,请参阅 ListUsers

示例 SAML 响应

以下是示例 SAML 响应中的图像。在这种情况下,身份提供程序 (IdP) 是 Azure Active Directory (Azure AD)。

SAML 响应示例。

错误消息:访问被拒绝,请联系您的 AWS 账户管理员寻求帮助。

错误消息:访问被拒绝。

这意味着什么?

已使用 SAML 成功对用户所代入的角色进行身份验证。但是,该角色无权调用 Connect Cu GetFederationToken stomer 的 API。此调用是必需的,这样用户才能使用 SAML 登录您的 Connect Customer 实例。

解决方案

  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}" ] } ] }
  2. 使用 IAM 控制台附加策略。或者,使用 attach-role-policy API,例如:

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

错误消息:会话已过期

如果您在登录时看到会话已过期消息,则可能只需要刷新会话令牌即可。访问您的身份提供商并登录。刷新 Connect 客户页面。如果您仍然收到此消息,请联系您的 IT 团队。