You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure AD客户端应用AccessToken缺失角色声明及权限配置咨询

问题解答

1. 托管身份是否具备访问Server-App的权限?

不具备。你的Client-App虽已被授予Server-App的Search.Address角色权限,但系统托管身份是独立的Azure AD服务主体,和Client-App属于完全不同的身份实体。之前的权限分配仅对Client-App生效,并未覆盖托管身份,因此托管身份获取的令牌中不会包含该角色。

2. 如何使用AppRoleAssignment进行权限分配?

需直接将Server-App的Search.Address角色分配给托管身份服务主体,以下是几种可行方式:

方式一:Azure门户操作

  • 进入Azure AD的企业应用页面,找到Server-App的企业应用实例(注意区分应用注册和企业应用)
  • 切换到用户和组选项卡,点击添加用户/组
  • 在用户下拉框中搜索并选择你的Function App系统托管身份(名称通常与Function App一致)
  • 在角色下拉框中选择Search.Address,点击选择后完成添加

方式二:PowerShell命令

# 获取托管身份的服务主体ID
$managedIdentityObjectId = (Get-AzADServicePrincipal -DisplayName "<你的Function App名称>").Id

# 获取Server-App的服务主体ID
$serverAppObjectId = (Get-AzADServicePrincipal -DisplayName "<Server-App名称>").Id

# 获取Search.Address角色的ID
$appRoleId = (Get-AzADServicePrincipal -ObjectId $serverAppObjectId).AppRoles | Where-Object {$_.Value -eq "Search.Address"} | Select-Object -ExpandProperty Id

# 创建应用角色分配
New-AzADServicePrincipalAppRoleAssignment -ObjectId $managedIdentityObjectId -PrincipalId $managedIdentityObjectId -ResourceId $serverAppObjectId -AppRoleId $appRoleId

方式三:Microsoft Graph API调用

发送POST请求至:https://graph.microsoft.com/v1.0/servicePrincipals/{managedIdentityObjectId}/appRoleAssignments

请求体示例:

{
  "principalId": "<托管身份的Object ID>",
  "resourceId": "<Server-App的服务主体Object ID>",
  "appRoleId": "<Search.Address角色的ID>"
}

注:调用该API需具备AppRoleAssignment.ReadWrite.All权限

完成分配后,重新通过ManagedIdentityCredential获取令牌,即可在令牌的roles声明中看到Search.Address角色。


内容的提问来源于stack exchange,提问作者PavanKumar GVVS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:10:25