配置 Web 和 Direct Line 通道安全性

创建Copilot Studio代理时,知道代理 ID 的任何人都可以通过 Demo 网站Custom 网站通道立即访问代理。 默认情况下,这些渠道可用,无需配置。

对于Microsoft Teams应用,可以配置高级 Web 通道安全选项。

Note

如果您有仅 Teams 许可证,无法生成密码来启用安全访问。 将为您自动创建安全访问令牌,并在默认情况下启用安全访问。

用户可以直接从 Copilot Studio 内或通过从某人接收代理 ID 来查找代理 ID。 但是,根据代理的功能和敏感度,这种访问可能不是可取的。

通过使用基于Direct Line的安全性,并利用Direct Line密钥或令牌启用安全访问,可以仅允许访问您控制的位置。

也可以交换和重新生成机密并刷新令牌,还可以在不再需要使用安全访问时轻松禁用安全访问。

Note

Copilot Studio 使用 Bot Framework Direct Line 通道将网页或应用连接到代理。

启用或禁用 Web 渠道安全性

您可以强制对每个单独代理使用密码和令牌。

启用此选项时,通道需要客户端 使用机密 或使用在运行时获取的 机密生成的令牌对请求进行身份验证。

尝试访问不提供此安全措施的代理不起作用。

  1. 转到代理的 “设置” 页,选择“ 安全性”,然后选择 “Web 通道安全性”。

“设置”浮出控件上突出显示的 Web 通道安全性的屏幕截图。

  1. 启用 “需要安全访问”。

警告

打开或关闭 “需要安全访问”时,系统可能需要长达两个小时才能传播设置并生效。 在此之前,上一个设置生效。 无需发布代理即可使此更改生效。

提前计划以避免无意中公开代理人。

如果需要禁用 Web 通道安全选项,可以通过清除 “需要安全访问 ”切换来执行此作。 禁用安全访问可能需要最多两个小时才能传播。

这是一个当禁用安全访问时弹出的确认消息的屏幕截图,其中说明此操作会使Demo网站和任何未使用机密或令牌的Direct Line通道变为可访问。此操作可能最多需要两个小时才能生效。

使用机密或令牌

如果创建服务对服务应用,则最简单的方法可能是在授权标头请求中指定机密。

如果编写的应用是客户端在 Web 浏览器或移动应用中运行,否则可能会对客户显示代码,则必须将机密更换为令牌。 如果不使用令牌,可能会泄露机密。 请求获取服务中的令牌时,请在授权标头中指定机密。

令牌仅对单个对话有效,如果不刷新,则会到期。

选择最适合您的情况的安全模型。

警告

请勿在浏览器中运行的任何代码中公开机密,无论是硬编码还是通过网络调用传输。

使用服务代码中的机密获取令牌是保护Copilot Studio代理的最安全方法。

获取机密

您需要机密,因此可以在应用的授权标头之类中指定。

  1. 在导航菜单中的设置下面,选择安全性。 然后选择 Web 渠道安全性磁贴。

  2. 机密 1机密 2 选择复制将其复制到粘贴板中。 选择可见性图标 以显示机密。 显示机密之前,将显示警告提示。

交换密钥

如果需要更改代理使用的机密,可以在不停机或中断的情况下对其进行更改。

Copilot Studio 提供两个密钥,它们可以同时运行。 可以将代理使用的密钥替换为另一个密钥。 交换机密并且用户都使用新机密进行连接后,可以重新生成机密。

重新生成密钥

若要重新生成密钥,请选择密钥旁边的重新生成

警告

使用原始机密或通过该机密获取的令牌连接的用户配置文件已断开连接。

生成令牌

可以生成在启动单个代理会话时使用的令牌。 有关详细信息,请参阅获取 Direct Line token部分中的将代理发布到移动或自定义应用程序

  1. 获取机密

  2. 在您的服务代码中,发送以下请求以用机密换取令牌。 将 <SECRET> 替换为步骤 1 中获取的机密的值。

    POST https://directline.botframework.com/v3/directline/tokens/generate
    Authorization: Bearer <SECRET>
    

以下代码段提供生成令牌请求及其响应的示例。

示例生成令牌请求

POST https://directline.botframework.com/v3/directline/tokens/generate
Authorization: Bearer RCurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0

示例生成令牌响应

HTTP/1.1 200 OK
[other headers]
{
  "conversationId": "abc123",
  "token": "RCurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xn",
  "expires_in": 1800
}

如果请求成功,响应中将包含对一个对话有效的令牌和指示令牌还有多少秒将到期的 expires_in 值。

若要使令牌有用,必须在令牌过期之前 刷新令牌

刷新令牌

只要令牌未过期,就可以无限次刷新令牌。

无法刷新过期的令牌。

若要刷新令牌,请发送以下请求,并将要刷新的令牌替换为 <TOKEN TO BE REFRESHED>

POST https://directline.botframework.com/v3/directline/tokens/refresh
Authorization: Bearer <TOKEN TO BE REFRESHED>

以下代码段提供刷新令牌请求和响应的示例。

示例刷新请求

POST https://directline.botframework.com/v3/directline/tokens/refresh
Authorization: Bearer CurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xn

示例刷新响应

如果请求成功,响应中将包含一个对之前令牌的同一个对话有效的新令牌和一个指示新令牌还有多少秒将到期的 expires_in 值。

若要使新令牌很有用,请在令牌过期之前再次刷新令牌。

HTTP/1.1 200 OK
[other headers]
{
  "conversationId": "abc123",
  "token": "RCurR_XV9ZA.cwA.BKA.y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xniaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0",
  "expires_in": 1800
}

有关刷新令牌的详细信息,请参阅 Direct Line API - AuthenticationRefresh a Direct Line token 部分。