Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure active directory 如何跨多个应用程序管理Azure广告应用程序角色_Azure Active Directory - Fatal编程技术网

Azure active directory 如何跨多个应用程序管理Azure广告应用程序角色

Azure active directory 如何跨多个应用程序管理Azure广告应用程序角色,azure-active-directory,Azure Active Directory,假设我是10个不同团队的经理,他们创建的服务定义为使用应用程序角色的AAD应用程序。是否有任何工具可以帮助管理每个服务定义的应用程序角色集,或者必须使用REST接口或PowerShell将其组合在一起 非常特定于为其创建/定义的应用程序。您将它们定义为应用程序注册清单的一部分,然后甚至将这些角色分配给专门用于此应用程序的用户/组。如果不同的应用程序使用相同的API,并且您的应用程序角色是为API应用程序定义的,您可以考虑一些重用/通用管理 因此,应用程序角色实际上不会跨越不同的应用程序。好吧,正

假设我是10个不同团队的经理,他们创建的服务定义为使用应用程序角色的AAD应用程序。是否有任何工具可以帮助管理每个服务定义的应用程序角色集,或者必须使用REST接口或PowerShell将其组合在一起

非常特定于为其创建/定义的应用程序。您将它们定义为应用程序注册清单的一部分,然后甚至将这些角色分配给专门用于此应用程序的用户/组。如果不同的应用程序使用相同的API,并且您的应用程序角色是为API应用程序定义的,您可以考虑一些重用/通用管理

因此,应用程序角色实际上不会跨越不同的应用程序。好吧,正如您所问,没有任何工具可以帮助管理每个服务定义的应用程序角色集

有时用于授权决策的另一个概念是Azure广告组成员资格。组确实可以跨越多个应用程序,这是我在这里提到它们的唯一原因,因此您可以检查传入用户的组声明。尽管使用特定于应用程序的角色通常效果更好,因为它们与应用程序的关系更密切。组往往比单个应用程序停留的时间长得多,很多时候,管理或拥有这些组的人及其成员与应用程序所有者不同(因此他们的决策标准也可能非常不同)

管理应用程序角色

请看这篇相关的SO帖子-

这里有一些选择

  • 动力壳-

    您可以在使用
    new AzureADApplication
    创建新应用程序时执行此操作,也可以在使用
    Set AzureADApplication
    为现有应用程序创建应用程序时执行此操作

    要将这些角色分配给现有用户,可以使用
    New-AzureADUserAppRoleAssignment

    请参阅结尾的PowerShell脚本

  • Azure AD图形API-

    您可以使用AppRole类型和应用程序实体来管理应用程序角色本身

    您可以使用Approvalsignment实体将这些角色分配给现有Azure AD用户等

  • Microsoft图形API-

    -请注意,这仅在测试版中可用-因此它还不适合生产应用程序

    在这里寻找

  • 对于生产应用程序,您可以从json文件(git等源代码管理的一部分)读取应用程序角色,并将其提供给PowerShell或Azure AD Graph API等编程选项之一

    下面是PowerShell脚本和其他相关的SO帖子

    (此问题讨论使用PowerShell解析json文件和更新应用程序清单)

    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