

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

# 驗證 Amazon Chime SDK 訊息的最終使用者用戶端應用程式
<a name="auth-client-apps"></a>

您也可以從最終使用者用戶端應用程式執行 Amazon Chime SDK 訊息。 [從後端服務對 Amazon Chime SDK 訊息進行 SDK 呼叫](call-from-backend.md) 說明如何進行 API 呼叫，例如 create-channel、send-channel-message 和 list-channel-messages。瀏覽器和行動應用程式等最終使用者用戶端應用程式會進行這些相同的 API 呼叫。用戶端應用程式也可以透過 WebSocket 連線，以接收其所屬頻道的訊息和事件即時更新。本節說明如何將 IAM 登入資料提供給範圍為特定應用程式執行個體使用者的用戶端應用程式。一旦最終使用者擁有這些登入資料，他們可以進行 中顯示的 API 呼叫[從後端服務對 Amazon Chime SDK 訊息進行 SDK 呼叫](call-from-backend.md)。若要查看用戶端應用程式的完整示範，請參閱 [ https：//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 SDK 訊息中接收訊息](websockets.md)。

## 提供 IAM 登入資料給最終使用者
<a name="connect-id-provider"></a>

Amazon Chime SDK 訊息原生與 AWS Identity and Access Management (IAM) 政策整合，以驗證傳入的請求。IAM 政策定義個別使用者可以執行的操作。您可以製作 IAM 政策，為您的使用案例提供縮小範圍的有限憑證。如需為 Amazon Chime SDK 訊息使用者建立政策的詳細資訊，請參閱 [Amazon Chime SDK 訊息的範例 IAM 角色](iam-roles.md)。

如果您有現有的身分提供者，您有下列選項可將現有的身分與 Amazon Chime SDK 訊息整合。
+ 您可以使用現有的身分提供者來驗證使用者，然後將身分驗證服務與 AWS Security Token Service (STS) 整合，為用戶端建立自己的憑證販賣服務。STS 提供用於擔任 IAM 角色的 APIs。
+ 如果您已經有 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 Chime SDK 訊息功能使用 Amazon Cognito 的範例，請參閱[使用 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 提供登入資料**  
如果您已經有 ActiveDirectory LDAP 等 IDP，而且想要實作自訂憑證販賣服務，或授予未驗證會議出席者聊天的存取權，您可以使用 [AWS STS AssumeRole API](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_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 和 [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 使用者。APIs 也可以由不同的 IAM 角色呼叫，例如[AWS Lambda 執行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。該 IAM 身分必須具有在 *ChimeMessagingSampleAppUserRole* `TagSession` 上呼叫 `AssumeRole`和 的許可。

------
#### [ 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"
        }
    ]
}
```

------

 在範例部署中， AWS Lambda 會使用 啟動 [Amazon EC2](https://aws.amazon.com/ec2/) 執行個體或 `ChimeMessagingSampleAppServerRole`。然後伺服器：

1. 對用戶端接收憑證的請求執行任何應用程式特定授權。

1. 在 `AssumeRole`上呼叫 STS`ChimeMessagingSampleAppUserRole`，標籤會參數化 `${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 ` 