【问题标题】:Azure Bot channel error "There was an error sending this message to your bot: HTTP status code Unauthorized"Azure Bot 通道错误“向您的机器人发送此消息时出错:HTTP 状态代码未经授权”
【发布时间】: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


【解决方案1】:

在azure ad中,Implicit Grant的设置由Manifest中的参数控制(你也可以在UI中设置,然后在manifest中更改),Access tokens对应@987654322 @,ID tokens对应oauth2AllowIdTokenImplicitFlow

如果你用pulumi创建应用,你可以设置Oauth2AllowImplicitFlow = false来禁用Access tokens,但是看起来pulumi inputs中没有oauth2AllowIdTokenImplicitFlow,所以你不能通过pulumi禁用ID tokens .

您可以尝试以下解决方法。

1.从警告中,它显示You should remove these settings or register the appropriate redirect URI. 因此您可以尝试使用如下代码创建具有重定向URI(即ReplyUrls)的应用程序,看看它是否可以在不禁用ID tokens 的情况下工作。

ReplyUrls = 
            {
                "https://replyurl",
            }

2.如果被接受,您可以在创建后使用Microsoft Graph SDKupdate the application。将web属性的implicitGrantSettings中的enableIdTokenIssuance设置为false,则ID tokens将被禁用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多