如何跨多个应用程序管理Azure AD应用程序角色

时间:2019-06-07 04:01:49

标签: azure-active-directory

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

1 个答案:

答案 0 :(得分:3)

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

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

有时会用于授权决策的另一个概念是Azure AD组成员身份。群组确实涉及多个应用程序,这是我什至在这里提到它们的唯一原因,因此您可以检查传入用户的群组声明。尽管使用应用程序特定的角色通常效果更好,因为它们与应用程序的关系更紧密。组的闲置时间通常比单个应用程序长,并且很多时候管理或拥有这些组及其成员的人与应用程序所有者不同(因此他们的决策标准也可能非常不同)。

管理应用程序角色

请查看与此相关的SO帖子-How to manage Azure AD App Roles for Azure AD Users

以下是一些选项。

  1. PowerShell-

    您可以在使用New-AzureADApplication创建新应用或使用Set-AzureADApplication创建现有应用的过程中执行此操作。

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

    请最后查看PowerShell脚本。

  2. Azure AD Graph API-

    您可以使用AppRole类型和应用程序实体来自己管理应用程序角色。 Documentation here

    enter image description here

    您可以使用AppRoleAssignment实体将这些角色分配给现有的Azure AD用户等。Documentation here

    enter image description here

  3. Microsoft Graph API-

    Documentation here-请注意,此功能仅在beta版本中可用-因此尚不适用于生产应用程序。

    在这里寻找working with App Role Assignments

对于生产应用程序,您可以从json文件(源控件的一部分,如git等)中读取应用程序角色,并将其提供给诸如PowerShell或Azure AD Graph API这样的编程选项之一。

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

SO Post 1

SO Post 2(此问题讨论了如何使用PowerShell解析json文件和更新应用程序清单)

Connect-AzureAD -TenantId <Tenant GUID>

# Create an application role of given name and description
Function CreateAppRole([string] $Name, [string] $Description)
{
    $appRole = New-Object Microsoft.Open.AzureAD.Model.AppRole
    $appRole.AllowedMemberTypes = New-Object System.Collections.Generic.List[string]
    $appRole.AllowedMemberTypes.Add("User");
    $appRole.DisplayName = $Name
    $appRole.Id = New-Guid
    $appRole.IsEnabled = $true
    $appRole.Description = $Description
    $appRole.Value = $Name;
    return $appRole
}

# ObjectId for application from App Registrations in your AzureAD
$appObjectId = "<Your Application Object Id>"
$app = Get-AzureADApplication -ObjectId $appObjectId
$appRoles = $app.AppRoles
Write-Host "App Roles before addition of new role.."
Write-Host $appRoles

$newRole = CreateAppRole -Name "MyNewApplicationRole" -Description "This is my new Application Role"
$appRoles.Add($newRole)

Set-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