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

如何通过Microsoft Graph为用户或组分配应用角色?

用Microsoft Graph给用户/组分配应用角色的完整方案

嘿,我之前也遇到过和你一样的困惑——一开始查资料好多都是旧的Azure AD Graph内容,但其实Microsoft Graph早就支持应用角色分配了,不管是v1.0还是beta端点都能用,下面给你拆解清楚怎么做:

一、先搞清楚三个关键ID

要完成分配,你得先拿到这三个ID(前两个你应该已经能获取了,第三个需要额外查一下):

  • Principal ID:就是你要分配的用户ID或者组ID(你已经能获取用户/组,这个没问题)
  • Resource ID:不是应用注册的Client ID!是目标应用的服务主体(Service Principal)ID——你可以通过调用GET /servicePrincipals?$filter=appId eq '{你的应用Client ID}'来获取这个ID
  • App Role ID:你要分配的那个应用角色的ID,来自目标应用注册里定义的应用角色,或者调用GET /servicePrincipals/{service-principal-id}/appRoles来返回所有可用角色,找到对应角色的id字段

二、API调用方式(v1.0已正式可用)

给用户分配应用角色

发送POST请求到:
POST https://graph.microsoft.com/v1.0/users/{user-id}/appRoleAssignments

请求体是JSON格式:

{
  "principalId": "用户ID",
  "resourceId": "应用服务主体ID",
  "appRoleId": "要分配的应用角色ID"
}

给组分配应用角色

类似地,发送POST请求到:
POST https://graph.microsoft.com/v1.0/groups/{group-id}/appRoleAssignments

请求体结构和上面完全一致,只是principalId换成组的ID就行。

三、Microsoft Graph SDK代码示例(C#为例)

如果你用的是Graph SDK,代码会更简洁:

用户分配示例

using Microsoft.Graph;
using System;
using System.Threading.Tasks;

public async Task AssignAppRoleToUser(GraphServiceClient graphClient, string userId, string servicePrincipalId, string appRoleId)
{
    var appRoleAssignment = new AppRoleAssignment
    {
        PrincipalId = Guid.Parse(userId),
        ResourceId = Guid.Parse(servicePrincipalId),
        AppRoleId = Guid.Parse(appRoleId)
    };

    await graphClient.Users[userId].AppRoleAssignments
        .Request()
        .AddAsync(appRoleAssignment);
}

组分配示例

public async Task AssignAppRoleToGroup(GraphServiceClient graphClient, string groupId, string servicePrincipalId, string appRoleId)
{
    var appRoleAssignment = new AppRoleAssignment
    {
        PrincipalId = Guid.Parse(groupId),
        ResourceId = Guid.Parse(servicePrincipalId),
        AppRoleId = Guid.Parse(appRoleId)
    };

    await graphClient.Groups[groupId].AppRoleAssignments
        .Request()
        .AddAsync(appRoleAssignment);
}

四、关键注意事项

  • 权限要求:如果是用应用身份调用(比如后台服务),需要申请AppRoleAssignment.ReadWrite.All应用权限并获得管理员同意;如果是委派身份(用户登录后调用),需要Directory.AccessAsUser.All或者AppRoleAssignment.ReadWrite.All委派权限,同样需要管理员同意
  • 应用角色的适配性:要分配的应用角色的allowedMemberTypes必须包含User(给用户分配)或Group(给组分配),否则会报错
  • 默认访问角色:如果目标应用没有自定义应用角色,你可以用默认的“用户访问”角色,它的ID固定是00000000-0000-0000-0000-000000000000,分配这个ID就代表给用户/组授予该应用的默认访问权限

内容的提问来源于stack exchange,提问作者Lionel R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:27:26