Azure ad b2c 通过Azure AD B2C授权Azure功能事件网格触发器
我的函数应用程序中有一个Azure事件网格触发器。该函数通过事件订阅订阅到事件网格主题。该功能工作正常,在功能应用程序的身份验证/授权刀片中未配置身份验证时触发。但是,当我从Blade集成B2C广告应用程序时,主题不会被传递,功能也不会被触发。此外,我可以在事件订阅中看到“未经授权”的错误。功能应用程序内的其他HTTP触发器需要B2C流。如何授予对事件网格的独占访问权,以便在没有B2C流的情况下传递此消息?您可以尝试以下方法: 启用事件网格以使用Azure广告应用程序: 使用下面的PowerShell脚本在Azure AD应用程序中创建角色和服务主体。您需要Azure AD应用程序中的租户ID和对象ID:Azure ad b2c 通过Azure AD B2C授权Azure功能事件网格触发器,azure-ad-b2c,azure-function-app,azure-eventgrid,Azure Ad B2c,Azure Function App,Azure Eventgrid,我的函数应用程序中有一个Azure事件网格触发器。该函数通过事件订阅订阅到事件网格主题。该功能工作正常,在功能应用程序的身份验证/授权刀片中未配置身份验证时触发。但是,当我从Blade集成B2C广告应用程序时,主题不会被传递,功能也不会被触发。此外,我可以在事件订阅中看到“未经授权”的错误。功能应用程序内的其他HTTP触发器需要B2C流。如何授予对事件网格的独占访问权,以便在没有B2C流的情况下传递此消息?您可以尝试以下方法: 启用事件网格以使用Azure广告应用程序: 使用下面的PowerSh
$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
$mytenatid=“”
连接AzureAD-TenantId$myTenantId
$myAzureADApplicationObjectId=“”
$eventGridAppId=“4962773b-9cdb-44cf-a8bf-237846a00ab7”
$eventGridRoleName=“AzureEventGridSecureWebhook”
函数CreateAppRole([string]$Name,[string]$Description)
{
$appRole=新对象Microsoft.Open.AzureAD.Model.appRole
$appRole.AllowedMemberTypes=新对象System.Collections.Generic.List[字符串]
$appRole.AllowedMemberTypes.Add(“应用程序”);
$appRole.DisplayName=$Name
$appRole.Id=新Guid
$approvle.IsEnabled=$true
$appRole.Description=$Description
$appRole.Value=$Name;
返回$appRole
}
$myApp=Get-AzureADApplication-ObjectId$MyAzureadApplication-ObjectId
$myAppRoles=$myApp.AppRoles
$eventGridSP=Get-AzureADServicePrincipal-Filter(“appId eq'+$eventGridAppId+”))
写入主机“添加新角色之前的应用程序角色…”
写入主机$myAppRoles
if($myAppRoles-匹配$eventGridRoleName)
{
写入主机“Azure事件网格角色已定义。`n”
}
其他的
{
$myServicePrincipal=Get-AzureADServicePrincipal-Filter(“appId eq'+$myApp.appId+”))
$newRole=CreateAppRole-名称$eventGridRoleName-说明“Azure事件网格角色”
$myAppRoles.Add($newRole)
设置AzureADApplication-ObjectId$myApp.ObjectId-AppRoles$myAppRoles
}
if($eventGridSP-匹配“Microsoft.EventGrid”)
{
写入主机“服务主体已定义。`n”
}
其他的
{
$eventGridSP=新AzureADServicePrincipal-AppId$eventGridAppId
}
新AzureADServiceAppRoleAssignment-Id$myApp.AppRoles[0].Id-ResourceId$myServicePrincipal.ObjectId-ObjectId$eventGridSP.ObjectId-PrincipalId$eventGridSP.ObjectId
写入主机“My Azure AD租户Id:$myTenantId”
写入主机“我的Azure广告应用程序Id:$($myApp.AppId)”
写入主机“My Azure广告应用程序ObjectId:$($myApp.ObjectId)”
写入主机“我的Azure广告应用程序的角色:”
写入主机$myApp.AppRoles
- 从脚本的输出复制Azure AD租户ID并输入 它位于AAD租户ID字段中
- 从脚本的输出复制Azure AD应用程序ID,然后 在AAD应用程序ID字段中输入它
有关此解决方案的更多详细信息,请访问。因此我尝试了此方法,但最终无法创建事件订阅。我收到此错误:部署失败,出现以下错误:{“代码”:“Url验证”,“消息”:“https的Webhook验证握手失败://{function app Url}.azurewebsites.net/runtime/webhooks/EventGrid.Http POST请求失败,响应代码未知。有关疑难解答,请访问。活动id:fa614249-ee37-4847-a236-3cdea6cda70b,时间戳:8/18/2020 9:42:51 AM(UTC)。“}.$eventGridAppId=“4962773b-9cdb-44cf-a8bf-237846a00ab7”此Id是固定的还是应该从门户中的任何其他Id替换它?@LiqteqDeveloper,$eventGridAppId是“Azure事件网格”Azure Active Directory AppId。有关使用事件网格事件进行端点验证的详细信息,请参阅。有关处理webhooks事件网格事件验证的示例代码,请参阅。@Liqteq Developer您使用此解决方案使其工作了吗?我也有同样的问题。我在文档中找不到有关此限制的任何信息。