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

为何New-MgServicePrincipalAppRoleAssignment有两个相似参数ServicePrincipalId与PrincipalId?

关于New-MgServicePrincipalAppRoleAssignment中两个ID参数的区别

先明确这个cmdlet的核心作用:给某个主体分配一个定义在服务主体上的应用角色。这两个参数的本质完全不同:

  • ServicePrincipalId:是承载你要分配的应用角色的服务主体ID。换句话说,你要分配的“权限/角色”属于哪个应用,就填这个应用对应的服务主体ID。比如你要给用户分配访问Microsoft Graph的权限,这里就填Microsoft Graph的服务主体ID。
  • PrincipalId:是被分配角色的主体ID,这个主体可以是用户、安全组,或者另一个服务主体。

二者取值不同的常见场景

  1. 给用户分配应用角色
    比如你有个自定义业务系统的服务主体ID是abc-123-xyz,现在要给用户user@contoso.com(ID为def-456-uvw)分配该系统的“管理员”角色,此时:
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId "abc-123-xyz" -PrincipalId "def-456-uvw" -AppRoleId "ghi-789-rst" -ResourceId "abc-123-xyz"

这里ServicePrincipalId和PrincipalId完全不同。

  1. 服务主体之间的权限分配(服务到服务调用)
    比如你的后台服务对应的服务主体A(IDaaa-000-aaa)需要调用另一个第三方服务的服务主体B(IDbbb-111-bbb)的API,此时要给A分配B上的某个应用角色,参数就会是:
  • ServicePrincipalId:bbb-111-bbb(角色所属的服务主体)
  • PrincipalId:aaa-000-aaa(被分配权限的服务主体)

为什么示例里二者常相同?

很多示例是演示服务主体给自己分配角色的场景——比如某个应用需要调用自己暴露的API,这时候会把自身的服务主体ID同时填到两个参数里,但这只是特殊场景,不是这个cmdlet的主要用法。

内容的提问来源于stack exchange,提问作者Vadim Bondaruk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:39:53