Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是botframework安全模型?_Botframework - Fatal编程技术网

什么是botframework安全模型?

什么是botframework安全模型?,botframework,Botframework,我正在探索Microsoft Bot Builder SDK,以创建一个与MS团队集成的聊天机器人。提供的大多数示例都没有任何身份验证机制,引用OAuth的示例似乎这样做是为了允许bot使用代表流访问资源。考虑安全模型的正确方法是,bot应该被视为公共的,并且访问的任何非公共信息都是从调用用户的上下文中完成的?bot框架有三种身份验证/授权需要考虑: -Microsoft应用程序ID和密码 -直接线路秘密/令牌,或其他通道的各种机制 -OAuth卡/提示/代币 不幸的是,文档中关于which i

我正在探索Microsoft Bot Builder SDK,以创建一个与MS团队集成的聊天机器人。提供的大多数示例都没有任何身份验证机制,引用OAuth的示例似乎这样做是为了允许bot使用代表流访问资源。考虑安全模型的正确方法是,bot应该被视为公共的,并且访问的任何非公共信息都是从调用用户的上下文中完成的?

bot框架有三种身份验证/授权需要考虑:

  • -Microsoft应用程序ID和密码
  • -直接线路秘密/令牌,或其他通道的各种机制
  • -OAuth卡/提示/代币
  • 不幸的是,文档中关于which is which的内容有些不一致,但我刚刚在这里提出了一个问题:

    在任何情况下,都没有必要将所有的机器人都视为“公共的”。Bot Builder SDK使用其应用程序ID和密码对传入消息和传出消息进行身份验证。这意味着发送到bot端点的任何未经授权的消息都将被拒绝,其他bot无法模拟您的消息

    通常,如果希望bot代表用户访问安全信息,则应该让用户登录。但既然你提到要限制特定租户使用机器人,我可以简单地解释一下如何做到这一点。您可以在C#中找到实现此功能的中间件,下面是一个经过修改的代码版本,我认为它通过使用哈希集而不是字典进行了改进:

    公共类TeamsTenantFilteringMiddleware:IMIDleware { 私有只读哈希集租户映射; 公共团队StenantFilteringMiddleware(IEnumerable AllowedTenantId) { if(allowedTenantIds==null) { 抛出新ArgumentNullException(nameof(allowedTenantIds)); } this.tenantMap=新哈希集(allowedTenantIds); } 公共异步任务OnTurnAsync(ITurnContext turnContext,NextDelegate next,CancellationToken CancellationToken=default(CancellationToken)) { 如果(!turnContext.Activity.ChannelId.Equals(Channels.Msteams,StringComparison.OrdinalIgnoreCase)) { 等待下一步(取消令牌)。配置等待(false); 返回; } TeamsChannelData TeamsChannelData=turnContext.Activity.GetChannelData(); 字符串tenantId=teamsChannelData?.Tenant?.Id; if(string.IsNullOrEmpty(tenantId)) { 抛出新的UnauthorizedAccessException(“缺少租户Id”); } 如果(!this.tenantMap.Contains(tenantId)) { 抛出新的UnauthorizedAccessException(“租户Id'”+tenantId+“'不允许访问”); } 等待下一步(取消令牌)。配置等待(false); } }
    您是在寻找一个通用的答案,还是想要一个特定的安全解决方案?也就是说,您的问题是否有一个特定的用例,或者您是否会接受一个解决您的问题的答案?你在使用哪个频道,你想限制谁访问?@KyleDelaney我现在使用的频道是团队。最终,我对如何使用bot服务的意图的信息/建议感兴趣。看起来,按照这些例子,我只是在互联网上提供了一个服务,它可以响应任何形式良好的请求。是否存在我忽略的身份验证步骤,或者bot是一个自动访问不同oauth服务的中间人。因此,您是否希望将bot限制为特定租户中的用户?您是否试图阻止处理来自团队以外来源的请求?@KyleDelaney是的,我想限制呼叫者,以便我能够访问比一般公众更敏感的信息/服务。在这一点上,我是一个试图探索如何最好地将这个工具集成到我们的堆栈中的noob。如果它需要一个作用域为User.Read的oauth来获取一个概要文件并手工验证租户,那么就这样吧。我只是想验证一下,我是以惯用的方式使用这个框架的,而不是把概念塞进意料之外的东西里。