使用Azure AD身份验证无法为同一组织内的BOT授权多个用户
以下是我们尝试的步骤。 1.创建一个Office 365组织,以便成为Azure AD的管理员
通过在同一组织中的Azure上的应用程序注册来注册Azure AD应用程序,然后通过遵循URL-https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-authentication?view=azure-bot-service-4.0&tabs=csharp%2Cbot-msgraph-auth
<分配给该应用程序读取电子邮件和日历的权限/ li>然后在天蓝色的情况下创建了网络应用bot
然后在漫游器的[OAuth连接设置]设置下添加了Azure AD应用程序详细信息,该详细信息首先根据Microsoft URL中的建议作为Azure AD V1.0添加了
使用了项目的标准模板代码-Github示例代码存储库中的BotAuthenticaionMSGraph-https://github.com/microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore
在示例代码中,我们只需要编辑appsettings.json文件以添加[ConnectionName,MicrosoftAppId,MicrosoftAppPassword]
然后将本地bot代码发布到Azure上的Web应用程序bot的应用程序服务
在Azure的[Web聊天测试]中测试了Bot身份验证-适用于我的Azure AD
然后为漫游器启用了Directline渠道,并将漫游器分发给了同一组织的其他用户
问题出在这里-当其他用户打开漫游器时,他们可以看到最初已经登录的admin用户的电子邮件和日历。因此,当其他用户注销并通过其AD凭据登录时,此后只有他的电子邮件和日历数据可用。
问题-因此,在给定的时间点上,机器人聊天中仅全局可见一个用户的o365数据,而不是登录该会话的单个用户的数据。 AD令牌不是针对每个用户会话的,而是针对所有会话的通用令牌。
使用Azure AD V2时,尝试登录时收到错误请求。
请帮助。谢谢。
https://github.com/microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore
使用了BotAuthenticaionMSGraph项目
期望的是,每个用户都应该能够单独登录,并且只有他的数据记录才能在机器人对话中清晰可见。
答案 0 :(得分:0)
我已经测试了示例代码,并且对于Azure AD V1和V2都可以正常工作。
我按照Azure AD v2进行了配置。不要忘记为 Scopes 输入Mail.Read Mail.Send openid profile User.Read User.ReadBasic.All
。它与Azure AD V1不同。否则,尝试登录时它将返回400错误的请求。
我没有重印第一期。您能告诉其他用户在哪里打开漫游器吗?来自“网络聊天测试”吗?
更新
您需要注意,您正在处理两个用户身份:
请参见Security considerations。当漫游器要求频道中的用户A登录到身份提供者P时,登录过程必须确保用户A是登录到P的用户。如果允许另一个用户B登录,则该用户A可以通过漫游器访问用户B的资源。
要启用保护,您需要配置受信任的Origins和防篡改的用户ID。
您可以参考sample code。
这个博客Using WebChat with Azure Bot Service’s Authentication提供了更详细的信息。