

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

# 对最终用户客户端应用程序进行身份验证以便进行 Amazon Chime SDK 消息传递
<a name="auth-client-apps"></a>

您还可以通过最终用户客户端应用程序运行 Amazon Chime 软件开发工具包消息。 [如何从后端服务发出 SDK 调用以便进行 Amazon Chime SDK 消息传递](call-from-backend.md)解释了如何进行 API 调用，例如 create-channel send-channel-message、和。 list-channel-messages浏览器和移动应用程序等最终用户客户端应用程序会进行相同的 API 调用。客户端应用程序还可以通过连接 WebSocket ，以接收其所属频道的消息和事件的实时更新。本节介绍如何向限于特定应用程序实例用户的客户端应用程序提供 IAM 凭证。最终用户获得这些凭证后，可以进行 [如何从后端服务发出 SDK 调用以便进行 Amazon Chime SDK 消息传递](call-from-backend.md) 中所示的 API 调用。要查看客户端应用程序的完整演示，请参阅 [ https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat)。有关接收来自客户端应用程序所属频道的实时消息的更多信息，请参阅 [WebSockets 用于在 Amazon Chime 软件开发工具包消息中接收消息](websockets.md)。

## 向最终用户提供 IAM 凭证
<a name="connect-id-provider"></a>

Amazon Chime SDK 消息传递与 AWS 身份和访问管理 (IAM) 策略进行原生集成，用于对传入的请求进行身份验证。IAM 策略定义了个人用户可以做什么。可以制定 IAM 策略来为用例提供范围有限的凭证。有关为 Amazon Chime SDK 消息传递用户创建策略的更多信息，请参阅 [用于 Amazon Chime SDK 消息传递的 IAM 角色示例](iam-roles.md)。

如果您已有身份提供商，则可以使用以下选项将现有身份与 Amazon Chime SDK 消息传递集成。
+ 您可以使用现有的身份提供商对用户进行身份验证，然后将身份验证服务与 AWS 安全令牌服务 (STS) 集成，为客户创建自己的凭证自动售货服务。STS 允许 APIs 担任 IAM 角色。
+ 如果您已经有兼容 SAML 或 OpenID 的身份提供商，我们建议您使用 Amazon [Cognito 身份池](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)，以便提取对 AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) 和 [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) 的调用。Amazon Cognito 集成了 OpenID、SAML 和公共身份提供商，如 Facebook、Login with Amazon、Google 和 Sign in with Apple。

如果您没有身份提供商，则可以开始使用 Amazon Cognito 用户群体。有关如何将 Amazon Cognito 与 Amazon Chime SDK 消息传递功能配合使用的示例，请参阅[使用 Amazon Chime SDK 消息传递在应用程序中构建聊天功能](https://aws.amazon.com/blogs/business-productivity/build-chat-features-into-your-application-with-amazon-chime-sdk-messaging/)。

或者，您可以使用 [AWS STS](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) 创建自己的凭证售卖服务或构建自己的身份提供商。

**使用 STS 出售凭证**  
[如果您已经拥有 IDP（例如 ActiveDirectory LDAP），并且想要实现自定义凭证自动售卖服务，或者向未经身份验证的会议与会者授予聊天权限，则可以使用 STS API。AWSAssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)为此，您需要首先创建一个 Amazon Chime SDK 消息传递 SDK 角色。有关创建该角色的更多信息，请参阅[创建将权限委派给 IAM 用户的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

该 IAM 角色将有权访问应用程序将使用的 Amazon Chime SDK 消息传递操作，如下所示：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "chime:GetMessagingSessionEndpoint"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "chime:SendChannelMessage",
                "chime:ListChannelMessages",
                "chime:CreateChannelMembership",
                "chime:ListChannelMemberships",
                "chime:DeleteChannelMembership",
                "chime:CreateChannelModerator",
                "chime:ListChannelModerators",
                "chime:DescribeChannelModerator",
                "chime:CreateChannel",
                "chime:DescribeChannel",
                "chime:ListChannels",
                "chime:DeleteChannel",
                "chime:RedactChannelMessage",
                "chime:UpdateChannelMessage",
                "chime:Connect",
                "chime:ListChannelBans",
                "chime:CreateChannelBan",
                "chime:DeleteChannelBan",
                "chime:ListChannelMembershipsForAppInstanceUser",
                "chime:AssociateChannelFlow",
                "chime:DisassociateChannelFlow",
                "chime:GetChannelMessageStatus"
            ],
            "Resource": [
            "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/user/my_applications_user_id",
            "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/channel/*"
    ]
        }
    ]
}
```

------

在本示例中，将此角色称为*ChimeMessagingSampleAppUserRole*。

请注意用户 ARN 资源中*ChimeMessagingSampleAppUserRole*策略`${my_application_user_id}`中的会话标签。此会话标签在 [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 调用中进行了参数化，以将返回的凭证限制为只拥有单个用户的权限。

使用已获得认证[https://docs.aws.amazon.com/STS/latest/APIReference/API_TagSesstion.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_TagSesstion.html) APIs 的 IAM 实体（例如 IAM 用户）调用[https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)和。 APIs 也可以由不同的 IAM 角色调用，例如[AWS Lambda 运行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。该 IAM 身份必须具有调用`AssumeRole`和`TagSession`开启的权限*ChimeMessagingSampleAppUserRole*。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
         {
            "Effect": "Allow",
            "Action": [ 
                "sts:AssumeRole",
                "sts:TagSession"
                ],
            "Resource": "arn:aws:iam::123456789012:role/ChimeMessagingSampleAppUserRole"
        }
    ]
}
```

------

 在本示例中，将此角色称为*ChimeSampleAppServerRole*。

您需要将 `ChimeMessagingSampleAppUserRole` 的信任策略设置为允许 `ChimeMessagingSampleAppServerRole` 调用其上的 [STS AssumeRole API](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)。有关将 IAM 角色与信任策略结合使用的更多信息，请参阅[如何将 IAM 角色与信任策略结合使用](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)。您可以使用 AWS IAM 角色控制台将此策略添加到`ChimeMessagingSampleAppUserRole`。以下示例介绍了一种典型的信任关系。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/ChimeMessagingSampleAppServerRole"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

 在示例部署中，A [mazon EC2](https://aws.amazon.com/ec2/) 实例 AWS Lambda 或使用启动`ChimeMessagingSampleAppServerRole`。然后，服务器：

1. 对客户端接收凭证的请求执行任何特定于应用程序的授权。

1. 在 `ChimeMessagingSampleAppUserRole` 上调用 STS `AssumeRole`，并使用标签来参数化 `${aws:PrincipalTag/my_applications_user_id}`。

1. 将 `AssumeRole` 调用中返回的凭证转发给用户。

以下示例介绍了在步骤 2 中扮演角色的 CLI 命令：

`aws sts assume-role --role-arn arn:aws:iam::my_aws_account_id:role/ChimeMessagingSampleAppUserRole --role-session-name demo --tags Key=my_applications_user_id,Value=123456789 ` 