来自不同机器的 Azure Bot 身份验证

Azure Bot Authentication from different machines

我正在使用示例 Azure MSGraph 机器人身份验证 (https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-authentication?view=azure-bot-service-4.0&tabs=csharp),没有任何代码更改(仅更改应用程序 ID 和连接名称)。 我有一个带有 WebChat 示例的 html 页面,在 Azure 门户的后面,我有 MSGraph 身份验证。以下是错误的步骤:

  1. 我已将我的机器人部署到 Azure 并使用 WebChat
  2. 创建了一个 html 页面
  3. 我正在登录 WebChat window,并且 bot returns 我的域名,这里一切正常
  4. 如果我在第二台机器上使用机器人打开同一页面,我希望由另一个用户再次看到身份验证对话框。但是我在没有任何身份验证过程的情况下从第一台机器看到了我自己的凭据。
  5. 如果我在第二台机器上单击 "log out" 并尝试登录,我会看到第二个用户的域名 - 正如预期的那样。因此身份验证过程运行良好,机器人知道谁在尝试登录。

换句话说,对于其他域用户,我的身份验证会话在其他浏览器和其他计算机上保持活动状态。我该如何防止这种情况?

(...) If userID is not specified, it will default to a random user ID. Multiple users sharing the same user ID is not recommended; their user state will be shared. (API documentation)

您正在将用户 ID 设置为 YOUR_USER_ID,这意味着状态将在所有用户之间共享。这会导致您遇到问题,并且在您对用户进行身份验证时存在安全风险。

删除代码中声明 userID 的行,如下例所示。如果没有设置userID,默认为随机用户ID。

   window.WebChat.renderWebChat(
            {
               directLine: window.WebChat.createDirectLine({
                  token: 'YOUR_DIRECT_LINE_TOKEN'
               }),
               userID: 'YOUR_USER_ID', <!-- REMOVE THIS LINE -->
               username: 'Web Chat User',
               locale: 'en-US',
               botAvatarInitials: 'WC',
               userAvatarInitials: 'WW'
            },
            document.getElementById('webchat')
         );