【发布时间】:2021-01-27 07:31:34
【问题描述】:
尝试将消息从 azure Bot 通道发送到 api 时出现未经授权的错误。我已经使用 pulumi 部署了 azure app 和 Bot 频道。在 azure 应用程序中,我注意到身份验证部分中有关于 Implicit Grant 的警告。
如果我从 azure 门户禁用隐式授予设置,则 Bot 通道可以正常工作。我正在根据 pulumi 文档使用默认设置创建 azure 应用程序,但没有选项可以删除此 Implicit Grant 设置
我使用 this link 使用 pulumi 创建了 Azure 应用程序和 Bot 通道
public static AzureAD.Application Create()
{
var name = "app-name";
var azureApp = new AzureAD.Application(name, new AzureAD.ApplicationArgs
{
Name = name
// Tried combinations of the following lines, but it makes no difference
//, Type = "native"
//, Oauth2AllowImplicitFlow = false
});
CreatePrincipal(azureApp);
return azureApp;
}
private static void CreatePrincipal(AzureAD.Application azureApp)
{
var name = "app-principal";
new AzureAD.ServicePrincipal(name, new AzureAD.ServicePrincipalArgs
{
ApplicationId = azureApp.ApplicationId
});
}
public static ChannelsRegistration Create(ResourceGroup resourceGroup, AzureAD.Application teamsBotAzureApp)
{
var channelName = "Channel";
var channel = new ChannelsRegistration(channelName, new ChannelsRegistrationArgs
{
Location = "global",
ResourceGroupName = resourceGroup.Name,
Sku = "F0",
MicrosoftAppId = teamsBotAzureApp.ApplicationId,
Endpoint = "https://azurefunction.com/api/BotMessagesHandler"
});
CreateChannel(resourceGroup, channel);
return channel;
}
【问题讨论】:
-
当频道调用您的机器人时,它会发送带有承载令牌的身份验证标头。这里解释了如何验证和验证这个令牌的过程:docs.microsoft.com/azure/bot-service/rest-api/…
-
我对隐式授权知之甚少,但粗略阅读它看起来并不适用于机器人。我的理解是隐式授权流程是接收者和调用者之间的交换。调用您的机器人的通道服务未针对此类交换进行配置,它们被设置为发送和接收 JWT 不记名令牌,如上所述。您可以做的是将前端与机器人后端分开,并分别发布。
-
综上所述,如果您只针对 Direct Line 渠道,则应用服务扩展可能允许隐式授权流,因为它是应用服务扩展并在您的应用上下文中运行,甚至可以在 VNET 中隔离。更多信息可以在这里找到:docs.microsoft.com/azure/bot-service/…
-
您从 azure 门户禁用了隐式授予,然后 Bot 通道工作正常,那么您的问题是什么?
-
@JoyWang,因为我正在用 pulumi 做,所以我不想手动做
标签: azure asp.net-core azure-active-directory botframework pulumi