现在,我在应用程序注册下运行 MS Teams Bot,配置为使用“任何组织目录(任何 Azure AD 目录 - Multi-Tenancy )中的帐户和个人 Microsoft 帐户(例如 Skype、Xbox)”。
首先,我对这个主题进行了研究,并且在写这个问题时考虑了以下资源:
- Comment on issue #9498 @ azure-sdk-for-net
- Azure Bot App Registration requiring multi-tenancy when single-tenant is prefered
- Bot Framework - App registration - Single tenant vs Multi tenant
根据我的理解,所有这些答案都是这样的:
- 2021 年底之前,仅支持 Multi-Tenancy 应用作为机器人身份
- 现在我应该能够使用 Single-tenat 进行应用注册,但这需要额外的配置
- 上述更改生效的时刻是机器人尝试进行身份验证的时刻
由于其他机器人强制(明确)授权使用 ex。 MicrosoftAppCredentials
- MS Teams Bot 在 XML 文件(如机器人服务中的 appsettings.json
)中以声明方式配置其授权详细信息。
如何将单租户应用程序注册与 MS Teams 中使用的 Azure Bot 一起使用?还是目前无法实现?
编辑:
对于 future 的读者:根据答案,我准备了两个位置,您可以在其中访问传入事件的 TenantId 以执行白名单验证(在 Multi-Tenancy 设置中,因为单租户仍然无法在 Teams 上运行):
- 在
BotController
中:
[HttpPost]
public async Task PostAsync()
{
// Here using
//this.Request.Headers["X-Ms-Tenant-Id"].ToString()
}
- 在
TeamsActivityHandler
实例方法重写中:
internal class /***/ : TeamsActivityHandler
{
//any method that have access to TurnContext or Activity
public override Task /***/(ITurnContext<IInvokeActivity> turnContext, ...)
{
// Here using
//turnContext.Activity.Conversation.TenantId
}
}
有了 TenantId,您可以将其与允许的租户进行比较,并相应地拒绝或允许。
最佳答案
我最近在这个网站上与另一位用户遇到了这个问题,主动消息传递不起作用,因为他们选择了单租户。这是最近的一个选项,而且它似乎与我的研究不符——我会选择 Multi-Tenancy 选项。如果您确实需要阻止其他租户访问机器人(这很推荐,因为任何 Teams 租户中的任何用户都可能访问机器人,最好将您的租户 ID 列入白名单)。这里有一个关于如何执行此操作的旧示例 - 尚未测试它是否仍然有效: https://github.com/OfficeDev/microsoft-teams-sample-complete-csharp/blob/master/template-bot-master-csharp/middleware/Middleware.cs
关于azure - 适用于 Microsoft Teams 的 Azure Bot App Reg 可以使用单租户吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71688474/