为何New-MgServicePrincipalAppRoleAssignment有两个相似参数ServicePrincipalId与PrincipalId?
关于
New-MgServicePrincipalAppRoleAssignment中两个ID参数的区别 先明确这个cmdlet的核心作用:给某个主体分配一个定义在服务主体上的应用角色。这两个参数的本质完全不同:
- ServicePrincipalId:是承载你要分配的应用角色的服务主体ID。换句话说,你要分配的“权限/角色”属于哪个应用,就填这个应用对应的服务主体ID。比如你要给用户分配访问Microsoft Graph的权限,这里就填Microsoft Graph的服务主体ID。
- PrincipalId:是被分配角色的主体ID,这个主体可以是用户、安全组,或者另一个服务主体。
二者取值不同的常见场景
- 给用户分配应用角色
比如你有个自定义业务系统的服务主体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完全不同。
- 服务主体之间的权限分配(服务到服务调用)
比如你的后台服务对应的服务主体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
相关产品推荐
相关产品推荐

