要确保从Microsoft Teams到机器人的流量安全?

use*_*126 0 microsoft-teams

如何保护从Microsoft Teams到bot的流量,以便该bot可以回答公司特定的问题/讨论,而不必暴露为匿名WebAPI?

Bot与Teams UI的集成从bot框架的角度来看很容易,但是现在没有关于如何仅针对特定企业隔离bot的文档。

业务案例-我们要构建企业特定的机器人,该机器人只能回答特定于问题所在的特定企业的问题。从技术上讲,这可以通过对SharePoint或Microsoft Graph的仅应用程序访问来完成,但是我们不能为Internet匿名公开这种WebAPI。

有任何设计模式吗?

Bil*_*SFT 5

现在这是可能的,并且实际上我甚至已经在CoffeeScript和Node.JS中为Hubot实现了它。我下面描述的是JavaScript / Node.JS中的外观。

定义一个环境变量,该变量在设置时会过滤特定的租户ID OFFICE_365_TENANT_FILTER。(以这种方式进行操作是在生产中启用此功能的便捷方法,但不一定在开发过程中启用。)

对于Microsoft Teams,可以在以下位置找到Office 365租户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();
    }
  }
});
// [...]
Run Code Online (Sandbox Code Playgroud)