通过Azure AD B2C授权Azure功能事件网格触发器 [英] Authorize Azure Function Event Grid Trigger through Azure AD B2C

查看:19
本文介绍了通过Azure AD B2C授权Azure功能事件网格触发器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的函数的App中有一个Azure事件网格触发器。该函数通过事件订阅订阅事件网格主题。该函数工作正常,当我在Functions App的Authentication/Authorization Blade内没有配置身份验证时,会触发该函数。但是当我从Blade集成B2C AD App时,主题没有下发,功能也没有触发。此外,我还可以在事件订阅中看到&Quot;未经授权&Quot;错误。函数App内部的其他HTTP触发器需要B2C流。如何授予对事件网格的独占访问权限,以便在没有B2C流的情况下传递此消息?

推荐答案

您可以尝试以下方法:

启用事件网格以使用您的Azure AD应用程序:

使用下面的PowerShell脚本在你的Azure AD应用程序中创建角色和服务主体。您需要来自Azure AD应用程序的租户ID和对象ID:

    修改PowerShell脚本的$myTenantId以使用您的Azure AD 租户ID。

  1. 修改PowerShell脚本的$myAzureADApplicationObjectId以使用Azure AD应用程序的对象ID。

  2. 运行修改后的脚本。

    $myTenantId = "<the Tenant Id of your Azure AD Application>"
    
    Connect-AzureAD -TenantId $myTenantId
    
    $myAzureADApplicationObjectId = "<the Object Id of your Azure AD Application>"
    
    $eventGridAppId = "4962773b-9cdb-44cf-a8bf-237846a00ab7"
    
    $eventGridRoleName = "AzureEventGridSecureWebhook"
    
    Function CreateAppRole([string] $Name, [string] $Description)
    {
        $appRole = New-Object Microsoft.Open.AzureAD.Model.AppRole
        $appRole.AllowedMemberTypes = New-Object System.Collections.Generic.List[string]
        $appRole.AllowedMemberTypes.Add("Application");
        $appRole.DisplayName = $Name
        $appRole.Id = New-Guid
        $appRole.IsEnabled = $true
        $appRole.Description = $Description
        $appRole.Value = $Name;
        return $appRole
    }
    
    $myApp = Get-AzureADApplication -ObjectId $myAzureADApplicationObjectId
    $myAppRoles = $myApp.AppRoles
    $eventGridSP = Get-AzureADServicePrincipal -Filter ("appId eq '" + $eventGridAppId + "'")
    
    Write-Host "App Roles before addition of new role.."
    Write-Host $myAppRoles
    
    if ($myAppRoles -match $eventGridRoleName)
    {
        Write-Host "The Azure Event Grid role is already defined.`n"
    }
    else
    {
        $myServicePrincipal = Get-AzureADServicePrincipal -Filter ("appId eq '" + $myApp.AppId + "'")
    
        $newRole = CreateAppRole -Name $eventGridRoleName -Description "Azure Event Grid Role"
        $myAppRoles.Add($newRole)
        Set-AzureADApplication -ObjectId $myApp.ObjectId -AppRoles $myAppRoles
    }
    
    if ($eventGridSP -match "Microsoft.EventGrid")
    {
        Write-Host "The Service principal is already defined.`n"
    }
    else
    {
        $eventGridSP = New-AzureADServicePrincipal -AppId $eventGridAppId
    }
    
    New-AzureADServiceAppRoleAssignment -Id $myApp.AppRoles[0].Id -ResourceId         $myServicePrincipal.ObjectId -ObjectId $eventGridSP.ObjectId -PrincipalId $eventGridSP.ObjectId
    
    Write-Host "My Azure AD Tenant Id: $myTenantId"
    Write-Host "My Azure AD Application Id: $($myApp.AppId)"
    Write-Host "My Azure AD Application ObjectId: $($myApp.ObjectId)"
    Write-Host "My Azure AD Application's Roles: "
    Write-Host $myApp.AppRoles
    

配置事件订阅:

在事件订阅的创建流程中,选择终结点类型"Web Hook"。一旦您指定了端点URI(事件网格端点-https://FUNCTION_DOMAIN/runtime/webhooks/eventgrid?functionName={FUNCTION_NAME}),的WebHook URI),请单击Create Event Subscription刀片顶部的Additional Feature选项卡。

在"Additional Feature"选项卡中,选中"Use AAD Authentication"复选框,并配置租户ID和应用程序ID:

  • 从脚本输出复制Azure AD租户ID并输入 它位于AAD租户ID字段中。
  • 从脚本的输出复制Azure AD应用程序ID并 在AAD应用程序ID字段中输入它。

编辑:

有关此解决方案的更多详细信息,请访问here

这篇关于通过Azure AD B2C授权Azure功能事件网格触发器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆