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
相关产品推荐
相关产品推荐

