c# - 团队 channel 1 :1 Authentication AAD integrated 上的 botframework

标签 c# azure-active-directory botframework microsoft-teams

我希望在团队 channel 上连接我的机器人,但我不知道如何确保它仅在我们的域(组织)中使用。

我已经测试了 Azure Web 应用程序的外观(身份验证 AAD),但它不适用于团队或网络聊天,因为端点地址未重定向。

我已经测试过实现 AUTH 卡,但它不适用于团队。

注意:我使用的是 botframework C# api BotBuilder 3.15.2.2

我看起来像其他“问”: AAD authentication in Microsoft teams for Bot Framework

Is it possible to access custom tabs in 1:1 chats in MS Teams?

https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/authentication/auth-flow-bot

https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/authentication/auth-bot-AAD

https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/authentication/authentication

https://tsmatz.wordpress.com/2016/09/06/microsoft-bot-framework-bot-with-authentication-and-signin-login/

真诚的, 帕斯卡。

编辑: 我已经实现了 Adrian 提出的解决方案,下面是一段在 MessasController.cs(后置函数)上实现的 C# 代码: 注意 ==> 添加本地主机使用的访问权限

 //https://stackoverflow.com/questions/51090597/botframework-on-teams-channel-11-authentication-aad-integrated
 string tenantIdAAD = "";
 try
 {
     tenantIdAAD = activity.GetChannelData<TeamsChannelData>().Tenant.Id;
 }
 catch (Exception exception)
 {
     tenantIdAAD = "";
 }

 ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

 if ([AAD_TenantID].TenantIdAAD.Equals(tenantIdAAD) || activity.ServiceUrl.StartsWith("http://localhost") )
 {
     await Conversation.SendAsync(activity, () => new Dialogs.RootDialog().LogIfException());
 }
 else
 {
     await connector.Conversations.ReplyToActivityAsync(activity.CreateReply("Access Denied"));
 }

最佳答案

传入消息包含可用于识别用户的信息。消息如下所示:

{ ... “从”: { "id": "29:1XJKJMvc5GBtc2JwZq0oj8tHZmzrQgFmB39ATiQWA85gQtHieVkKilBZ9XHoq9j7Zaqt7CZ-NJWi7me2kHTL3Bw", "name": "理查德莫", “aadObjectId”:“ae361bee-9946-4082-99dc-6994b00ceebb” }, “ channel 数据”:{ “租户”: { “id”:“72f988bf-86f1-41af-91ab-2d7cd011db47” } } }

channelData.tenant.id 标识用户所属的组织(O365 租户),因此您可以查看它并拒绝不是来自您期望的组织的消息。

该消息还在 from.aadObjectId 中具有发件人的 AAD 对象 ID。如果您需要向其他服务提供 token 以便您可以代表用户行事,则上面链接中的身份验证流程很有用,但如果您只需要用户的租户和身份,则该消息具有您所需要的一切。

(请记住先authenticate the incoming request,然后再信任消息中的任何信息。)

关于c# - 团队 channel 1 :1 Authentication AAD integrated 上的 botframework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51090597/

相关文章:

c# - 如果 x86 构建,则 Nunit.exe 无法在 Vista 64 位上运行

c# - Azure 函数通过具有输入数据存储绑定(bind)的队列触发

c# - "filter"是 Angular、Javascript 还是 ASP.Net MVC 中的保留字?

Azure AD B2C 在 token 请求上返回 AADSTS70000 错误

azure - 使用 AD 保护 Azure API 管理中的所有 API

java - 带有 Microsoft 错误的 Firebase 身份验证

c# - 在 Bot Framework 中获取 Skype 身份?

c# - 在多个线程之间共享一个 List<T>

node.js - HeroCard 中的多个按钮

c# - 将机器人部署到 Azure 后,在 Web 聊天中测试键入消息返回 "Not found"HTTP 状态代码