你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将用户和组分配到应用程序

本文介绍如何使用 PowerShell 将用户和组分配到 Azure Active Directory (Azure AD) 中的企业应用程序。 将用户分配到某个应用程序时,该应用程序会显示在该用户的我的应用门户中以方便访问。 如果应用程序公开应用角色,则你还可以将特定的应用角色分配给用户。

如果你将某组分配到应用程序,只有属于此组的用户才有访问权限。 此分配不会级联到嵌套组。

基于组的分配需要 Azure Active Directory Premium P1 或 P2 版本。 基于组的分配仅支持安全组。 目前不支持嵌套的组成员身份和 Microsoft 365 组。 有关本文中讨论的功能的其他许可要求,请参阅 Azure Active Directory 定价页

为了提高控制度,可将某些类型的企业应用程序配置为需要进行用户分配。 有关要求为应用分配用户的更多信息,请参阅管理对应用程序的访问

先决条件

若要使用 PowerShell 将用户分配到应用,需要:

  • 具有活动订阅的 Azure 帐户。 如果还没有帐户,可以免费创建一个帐户
  • 以下角色之一:全局管理员、云应用程序管理员、应用程序管理员或服务主体的所有者。
  • 如果尚未安装 AzureAD 模块(请使用命令 Install-Module -Name AzureAD)。 出现安装 NuGet 模块或新的 Azure Active Directory V2 PowerShell 模块的提示时,请键入 Y,然后按 ENTER。
  • 适用于基于组的分配的 Azure Active Directory Premium P1 或 P2 版。 有关本文中讨论的功能的其他许可要求,请参阅 Azure Active Directory 定价页

使用 PowerShell 将用户和组分配到应用

  1. 以提升的权限打开 Windows PowerShell 命令提示符。

  2. 运行 Connect-AzureAD 并使用全局管理员用户帐户登录。

  3. 使用以下脚本将用户和角色分配到应用程序:

    # Assign the values to the variables
    $username = "<Your 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
    

若要将组分配到企业应用,必须将 Get-AzureADUser 替换为 Get-AzureADGroup,并将 New-AzureADUserAppRoleAssignment 替换为 New-AzureADGroupAppRoleAssignment

有关如何将组分配到应用程序角色的详细信息,请参阅 New-AzureADGroupAppRoleAssignment 的文档。

示例

此示例使用 PowerShell 将用户 Britta Simon 分配到 Microsoft Workplace Analytics 应用程序。

  1. 在 PowerShell 中,将相应的值分配到变量 $username、$app_name 和 $app_role_name。

    # Assign the values to the variables
    $username = "britta.simon@contoso.com"
    $app_name = "Workplace Analytics"
    
  2. 在此示例中,我们并不确切地知道要将哪个应用程序角色名称分配给 Britta Simon。 运行以下命令,使用用户 UPN 和服务主体显示名称获取用户 ($user) 和服务主体 ($sp)。

    # 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'"
    
  3. 运行命令 $sp.AppRoles,显示可用于 Workplace Analytics 应用程序的角色。 在此示例中,我们要为 Britta Simon 分配“分析员”(访问权限受限)角色。 显示使用 Workplace Analytics 角色的用户可用的角色

  4. 将角色名称分配到 $app_role_name 变量。

    # Assign the values to the variables
    $app_role_name = "Analyst (Limited access)"
    $appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }
    
  5. 运行以下命令,将用户分配到应用角色:

    # Assign the user to the app role
    New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId $user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id
    

使用 PowerShell 从应用中取消分配用户和组

  1. 以提升的权限打开 Windows PowerShell 命令提示符。

  2. 运行 Connect-AzureAD 并使用全局管理员用户帐户登录。 使用以下脚本将用户和角色从应用程序中删除:

    # Store the proper parameters
    $user = get-azureaduser -ObjectId <objectId>
    $spo = Get-AzureADServicePrincipal -ObjectId <objectId>
    
    #Get the ID of role assignment 
    $assignments = Get-AzureADServiceAppRoleAssignment -ObjectId $spo.ObjectId | Where {$_.PrincipalDisplayName -eq $user.DisplayName}
    
    #if you run the following, it will show you what is assigned what
    $assignments | Select *
    
    #To remove the App role assignment run the following command.
    Remove-AzureADServiceAppRoleAssignment -ObjectId $spo.ObjectId -AppRoleAssignmentId $assignments[assignment #].ObjectId
    

删除被分配到应用程序的所有用户

#Retrieve the service principal object ID.
$app_name = "<Your App's display name>"
$sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
$sp.ObjectId

# Get Service Principal using objectId
$sp = Get-AzureADServicePrincipal -ObjectId "<ServicePrincipal objectID>"

# Get Azure AD App role assignments using objectId of the Service Principal
$assignments = Get-AzureADServiceAppRoleAssignment -ObjectId $sp.ObjectId -All $true

# Remove all users and groups assigned to the application
$assignments | ForEach-Object {
    if ($_.PrincipalType -eq "User") {
        Remove-AzureADUserAppRoleAssignment -ObjectId $_.PrincipalId -AppRoleAssignmentId $_.ObjectId
    } elseif ($_.PrincipalType -eq "Group") {
        Remove-AzureADGroupAppRoleAssignment -ObjectId $_.PrincipalId -AppRoleAssignmentId $_.ObjectId
    }
}

后续步骤