对最终用户客户端应用程序进行身份验证以便进行 Amazon Chime SDK 消息传递 - Amazon Chime SDK

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

对最终用户客户端应用程序进行身份验证以便进行 Amazon Chime SDK 消息传递

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

向最终用户提供 IAM 凭证

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

如果您已有身份提供商,则可以使用以下选项将现有身份与 Amazon Chime SDK 消息传递集成。

  • 您可以使用现有的身份提供商对用户进行身份验证,然后将身份验证服务与 AWS 安全令牌服务 (STS) 集成,为客户创建自己的凭证自动售货服务。STS 允许 APIs 担任 IAM 角色。

  • 如果您已经有兼容 SAML 或 OpenID 的身份提供商,我们建议您使用 Amazon Cognito 身份池,它可以抽象出对 STS 的调用 AWS AssumeRoleWithSAMLAssumeRoleWithWebIdentity。 亚马逊 Cognito 与 OpenID、SAML 和公共身份提供商(例如 Facebook、Login with Amazon、Google 和 “用苹果登录”)集成。

如果您没有身份提供商,则可以开始使用 Amazon Cognito 用户群体。有关如何将 Amazon Cognito 与 Amazon Chime SDK 消息传递功能配合使用的示例,请参阅使用 Amazon Chime SDK 消息传递在应用程序中构建聊天功能

或者,您可以使用 AWS STS 创建自己的凭证售卖服务或构建自己的身份提供商。

使用 STS 出售凭证

如果您已经拥有 IDP(例如 ActiveDirectory LDAP),并且想要实现自定义凭据自动售卖服务,或者向未经身份验证的会议与会者授予聊天权限,则可以使用 STS AWSAssumeRole API 。为此,您需要首先创建一个 Amazon Chime SDK 消息传递 SDK 角色。有关创建该角色的更多信息,请参阅创建将权限委派给 IAM 用户的角色

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

{ "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": [ "{chime_app_instance_arn}/user/${aws:PrincipalTag/my_applications_user_id}", "{chime_app_instance_arn}/channel/*" ] } ] }

在本示例中,将此角色称为ChimeMessagingSampleAppUserRole

请注意用户 ARN 资源中ChimeMessagingSampleAppUserRole策略${my_application_user_id}中的会话标签。此会话标签的参数化在 AssumeRoleAPI 调用将返回的证书限制为单个用户的权限。

这些区域有:AssumeRoleTagSession APIs 使用已获得认证的 IAM 实体(例如 IAM 用户)进行调用。 APIs 也可以由不同的 IAM 角色调用,例如AWS Lambda 运行角色。该 IAM 身份必须具有调用AssumeRoleTagSession开启的权限ChimeMessagingSampleAppUserRole

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

在本示例中,将此角色称为ChimeSampleAppServerRole

你需要ChimeMessagingSampleAppUserRole使用允许调用 STS 的信任策略ChimeMessagingSampleAppServerRole来设置 AssumeRole上面有 API。有关将 IAM 角色与信任策略结合使用的更多信息,请参阅如何将 IAM 角色与信任策略结合使用。您可以使用 AWS IAM 角色控制台将此策略添加到ChimeMessagingSampleAppUserRole。以下示例介绍了一种典型的信任关系。

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

在示例部署中,A mazon EC2 实例 AWS Lambda 或使用启动ChimeMessagingSampleAppServerRole。然后,服务器:

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

  2. ChimeMessagingSampleAppUserRole 上调用 STS AssumeRole,并使用标签来参数化 ${aws:PrincipalTag/my_applications_user_id}

  3. 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