如何保护从微软团队到机器人的流量,以便机器人可以回答公司特定的问题/讨论,而不需要以匿名WebAPI的形式公开?
从Bot框架方面来说,将bot集成到Teams很容易,但目前还没有关于如何将bot隔离到特定企业的文档。
商业案例-我们想要建立企业特定的机器人,它可以回答问题只特定于特定的企业从哪里来的问题。从技术上讲,这可以通过仅通过应用程序访问SharePoint或Microsoft Graph来完成,但我们不能在互联网上匿名公开这种WebAPI。
这方面有什么设计模式吗?
发布于 2017-05-18 10:49:46
现在这是可能的,实际上我已经用CoffeeScript和Node.JS为Hubot实现了它,下面描述的是它在JavaScript/Node.JS中的样子。
定义一个环境变量,在设置该变量时,它会筛选特定的租户ID OFFICE_365_TENANT_FILTER。(这样做是在生产中启用此功能的一种方便方法,但在开发期间不一定如此。)
对于微软团队,可以在此处找到Office365租户ID:session.message.sourceEvent.tenant.id。
最优雅的方法是检查作为中间件的租户ID,如果设置了筛选器但不匹配,则放弃对消息的进一步处理:
// [...]
var connector = new builder.ChatConnector({
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
var bot = new builder.UniversalBot(connector);
// Middleware to check for OFFICE_365_TENANT_FILTER and only continue processing if it matches.
// If OFFICE_365_TENANT_FILTER is not specified, do nothing.
bot.use({
botbuilder: function(session, next) {
var targetTenant = typeof(process.env.OFFICE_365_TENANT_FILTER) !== "undefined" ? process.env.OFFICE_365_TENANT_FILTER : null;
var currentMsgTenant = typeof(session.message.sourceEvent.tenant) !== "undefined" ? session.message.sourceEvent.tenant.id : null;
if (targetTenant !== null) {
if (targetTenant == currentMsgTenant) {
next();
}
else {
console.log("MS Teams: Attempted access from a different Office 365 tenant (" + currentMsgTenant + "): message rejected");
}
}
else {
next();
}
}
});
// [...]发布于 2018-04-20 03:59:02
以下是如何在C#中执行此操作,SDK公开了允许您将此操作过滤器添加到控制器类的TenantFilter,如下所示。
using Microsoft.Bot.Connector.Teams;
namespace Microsoft.Teams.Samples.HelloWorld.Web.Controllers
{
[BotAuthentication, TenantFilter]
public class MessagesController : ApiController
{
[HttpPost]
public async Task<HttpResponseMessage> Post([FromBody] Activity activity)租户筛选器将获取需要放置在web.config中的tenantIds的逗号分隔列表
<configuration>
<appSettings>
<!--other settings-->
<add key="AllowedTenants" value="*TenantId1,TenantId2,...*"/>Find your Office 365 tenant ID向您展示了如何通过PowerShell来实现这一点。
发布于 2016-11-04 03:17:25
目前不可能立即知道与机器人聊天的用户的租户id,除非机器人首先对用户进行认证。请看一下AuthBot。它说明了如何向用户发送登录链接并根据AAD对用户进行身份验证。
https://stackoverflow.com/questions/40398565
复制相似问题