将应用程序注册设置为 "Accounts in any organizational directory" 有什么影响

What are the implications of setting application registration to "Accounts in any organizational directory"

作为虚拟助手deployment documentation的一部分,它要求设置应用程序注册以允许Accounts in any organizational directory

但是,它没有描述这个被忽视的设置的含义。

这实际上是上周在内部弹出的一个讨论点。在此处发布答案以便社区可以更快地看到,然后我们才能获得官方 MSFT 文档



用户问题

用户创建了一个带有手动应用程序注册的机器人,并继续获得 "Internal Server Error"

"We tried a number of things to get around this, and through trial and error we found that once we changed the app registration setting for Supported account types from “Accounts in this organizational directory only” to “Accounts in any organization directory”, restarted the app, and the bot started working again. I replicated this in my sub, as well."



"Accounts in any organizational directory" 说明

这是必需的,以便我们(在机器人 framework.com 中)可以为机器人请求令牌。从相关线程中提取:

问题

由于以下错误,机器人从一开始就无法工作:

[Error] Microsoft.BotBuilderSamples.EchoWithCounterBot: Exception caught : Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials+OAuthException: Bad Request --->System.Net.Http.HttpRequestException: Response status code does not indicate success: 400 (Bad Request).

at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()

at Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.<RefreshTokenAsync>d__36.MoveNext()

发生此异常是因为 Bot Framework SDK 试图调用 botframework.com AAD 租户以检索令牌,而 AAD 正在回复 HTTP 400 错误请求,表明存在应用程序注册凭据的问题。 进一步的故障排除发现了 AAD 的以下特定错误: 在目录 'botframework.com'.

中找不到标识符为“[appID]”的应用程序

上下文

一个app注册有3个options/scopes什么样的账号可以使用:

  1. 当前组织目录中的帐户(对您来说,就是 xxx 目录)
  2. 任何组织目录中的帐户
  3. 任何组织目录中的帐户和个人 Microsoft 帐户(例如 Skype、Outlook.com、Xbox 等)

我在下面多次提到上面的数字。

默认情况下,当允许 Azure 门户在 Bot 资源创建期间创建自己的应用程序注册时,它会使用上面的选项 3。如果您选择自动创建,或者在创建过程中单击 link 以手动创建注册,则会出现这种情况——这两种方法都使用选项 3 创建注册。

例如,如果在门户中创建 Web App Bot,默认选项(在底部)是这样的:

你可以展开那个部分来得到这个:

如果您单击 link 以“创建应用程序 ID ...”,它会将您带到当前的应用程序注册门户,其中包含 pre-populated 应用程序 ID 和名称。

上面的两种方法都创建了上面 #3 范围的应用程序注册。

原因

根据上周与 AAD 团队的讨论以及我对机器人和注册进行的测试,问题是由注册范围太窄引起的。 在您的情况下,应用程序注册配置了上面的 #1 范围,这限制了注册,因此它只能由 xxx 使用。由于 Bot Framework SDK 需要 AAD botframework.com 租户才能使用该注册,因此未能检索到令牌。


分辨率

作为测试,我们使用 Azure 门户(在 Azure Active Directory 部分下)中的应用程序注册(预览)blade 将现有注册从选项 #1 修改为选项 #2。由于此选项会打开供任何 AAD 组织使用的注册,其中包括 botframework.com,Bot SDK 可以毫无问题地检索令牌并立即开始工作。


前进

由于您的组织使用单独的管理 system/application 进行应用程序注册,因此您需要确保创建供机器人使用的注册是使用选项 #2 或 #3 创建的,或者如果使用#1。如果注册只能由 xxx 租户使用,则保证 Bot 将无法工作,这是选项 #1。 可以从 Azure 门户修改现有注册:

门户 -> Azure Active Directory -> 应用程序注册(预览) -> [选择一个] -> 身份验证 blade

如果您看到这个,那么注册已经在#3 范围内并且应该没问题:

如果您看到这个,请确保选择了 #2: