Azure active directory 如何跨多个应用程序管理Azure广告应用程序角色
假设我是10个不同团队的经理,他们创建的服务定义为使用应用程序角色的AAD应用程序。是否有任何工具可以帮助管理每个服务定义的应用程序角色集,或者必须使用REST接口或PowerShell将其组合在一起 非常特定于为其创建/定义的应用程序。您将它们定义为应用程序注册清单的一部分,然后甚至将这些角色分配给专门用于此应用程序的用户/组。如果不同的应用程序使用相同的API,并且您的应用程序角色是为API应用程序定义的,您可以考虑一些重用/通用管理 因此,应用程序角色实际上不会跨越不同的应用程序。好吧,正如您所问,没有任何工具可以帮助管理每个服务定义的应用程序角色集 有时用于授权决策的另一个概念是Azure广告组成员资格。组确实可以跨越多个应用程序,这是我在这里提到它们的唯一原因,因此您可以检查传入用户的组声明。尽管使用特定于应用程序的角色通常效果更好,因为它们与应用程序的关系更密切。组往往比单个应用程序停留的时间长得多,很多时候,管理或拥有这些组的人及其成员与应用程序所有者不同(因此他们的决策标准也可能非常不同) 管理应用程序角色 请看这篇相关的SO帖子- 这里有一些选择Azure active directory 如何跨多个应用程序管理Azure广告应用程序角色,azure-active-directory,Azure Active Directory,假设我是10个不同团队的经理,他们创建的服务定义为使用应用程序角色的AAD应用程序。是否有任何工具可以帮助管理每个服务定义的应用程序角色集,或者必须使用REST接口或PowerShell将其组合在一起 非常特定于为其创建/定义的应用程序。您将它们定义为应用程序注册清单的一部分,然后甚至将这些角色分配给专门用于此应用程序的用户/组。如果不同的应用程序使用相同的API,并且您的应用程序角色是为API应用程序定义的,您可以考虑一些重用/通用管理 因此,应用程序角色实际上不会跨越不同的应用程序。好吧,正
new AzureADApplication
创建新应用程序时执行此操作,也可以在使用Set AzureADApplication
为现有应用程序创建应用程序时执行此操作
要将这些角色分配给现有用户,可以使用New-AzureADUserAppRoleAssignment
请参阅结尾的PowerShell脚本Connect AzureAD-TenantId
#创建具有给定名称和描述的应用程序角色
函数CreateAppRole([string]$Name,[string]$Description)
{
$appRole=新对象Microsoft.Open.AzureAD.Model.appRole
$appRole.AllowedMemberTypes=新对象System.Collections.Generic.List[字符串]
$appRole.AllowedMemberTypes.Add(“用户”);
$appRole.DisplayName=$Name
$appRole.Id=新Guid
$approvle.IsEnabled=$true
$appRole.Description=$Description
$appRole.Value=$Name;
返回$appRole
}
#AzureAD中应用程序注册的ObjectId
$APOBJECTID=“”
$app=获取AzureADApplication-ObjectId$appObjectId
$appRoles=$app.appRoles
写入主机“添加新角色之前的应用程序角色…”
编写主机$appRoles
$newRole=CreateAppRole-名称“MyNewApplicationRole”-说明“这是我的新应用程序角色”
$approvles.Add($newRole)
设置AzureADApplication-ObjectId$app.ObjectId-AppRoles$AppRoles
一旦您使用上面的脚本添加AppRole,就可以像这样为用户分配角色-
# Assign the values to the variables
$username = "<You user's UPN>"
$app_name = "<Your App's display name>"
$app_role_name = "<App role display name>"
# Get the user to assign, and the service principal for the app to assign to
$user = Get-AzureADUser -ObjectId "$username"
$sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
$appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }
# Assign the user to the app role
New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId
$user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id
#将值分配给变量
$username=“”
$app_role_name=“”
#获取要分配的用户以及应用程序要分配到的服务主体
$user=Get AzureADUser-ObjectId“$username”
$sp=获取AzureADServicePrincipal-过滤器“displayName eq'$app_name'”
$appRole=$sp.AppRoles |其中对象{$\u.DisplayName-eq$app\u role\u name}
#将用户分配到应用程序角色
新AzureADUserAppRoleAssignment-ObjectId$user.ObjectId-PrincipalId
$user.ObjectId-ResourceId$sp.ObjectId-Id$appRole.Id
感谢您的回复。如果你不介意的话,让我把我的问题再推进一步。想象一下,我有一个服务返回记录。在它的实现中,我可以访问ClaimsPrincipal,我可以使用它访问Approvles或Group,并根据它决定是否返回内容。我认为这对于人类用户来说是可行的,因为他们可以与appRoles和AAD组关联,但对于只能与appRoles关联而不能与AAD组关联的应用程序来说,这是行不通的。这是对的吗?@Pierre不客气!关于应用程序,是的,这也是我的理解,因此在应用程序中,您应该使用许可/权限。通常只有少量的应用程序,因此您甚至可以维护自己的自定义访问控制列表(ACL),用于检查传入令牌中的特定“appId”。不过,使用appRoles更具声明性。。这里是一个SO线程,我在某种程度上讨论了这两种方法@Pierre。另外,如果您使用组声明,您知道可以作为令牌的一部分返回的组声明的数量有一些限制(这样令牌大小就不会超过HTTP头大小限制。因此,如果组数较多,您可能需要使用Microsoft Graph API。我在这里详细介绍了这一点和其他相关信息。)
# Assign the values to the variables
$username = "<You user's UPN>"
$app_name = "<Your App's display name>"
$app_role_name = "<App role display name>"
# Get the user to assign, and the service principal for the app to assign to
$user = Get-AzureADUser -ObjectId "$username"
$sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
$appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }
# Assign the user to the app role
New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId
$user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id