管理应用程序的用户和组分配
本文介绍如何使用 PowerShell 将用户和组分配到 Microsoft Entra ID 中的企业应用程序。 将用户分配到某个应用程序时,该应用程序会显示在该用户的我的应用门户中以方便访问。 如果应用程序公开应用角色,则你还可以将特定的应用角色分配给用户。
将某个组分配给应用程序时,只有属于该组的用户才拥有访问权限。 该分配不会级联到嵌套组。
基于组的分配需要使用 Microsoft Entra ID P1 或 P2 版本。 安全组、Microsoft 365 组和通讯组支持基于组的分配,其 SecurityEnabled
设置将仅设置为 True
。 目前不支持嵌套组成员身份。 有关本文中讨论的功能的其他许可要求,请参阅 Microsoft Entra ID 定价页。
为了提高控制度,可将某些类型的企业应用程序配置为需要进行用户分配。 有关要求为应用分配用户的更多信息,请参阅管理对应用程序的访问。
注意
即使目录的用户同意策略允许用户代表自己同意,应用程序想要将用户分配到应用程序时也必须获得管理员的同意。
先决条件
若要将用户分配给企业应用程序,你需要:
- 具有活动订阅的 Microsoft Entra 帐户。 如果还没有帐户,可以免费创建一个帐户。
- 以下角色之一:云应用程序管理员、应用程序管理员或服务主体的所有者。
- 面向基于组的分配的 Microsoft Entra ID P1 或 P2。 有关本文中讨论的功能的其他许可要求,请参阅 Microsoft Entra ID 定价页。
提示
本文中的步骤可能因开始使用的门户而略有不同。
使用 Microsoft Entra 管理中心将用户和组分配给 Microsoft Entra ID 的应用程序
若要将用户或组帐户分配给企业应用程序,请执行以下操作:
至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心。
浏览到“标识”>“应用程序”>“企业应用程序”>“所有应用程序”。
在“搜索”框中输入现有应用程序的名称,然后从搜索结果中选择该应用程序。
依次选择“用户和组”和“添加用户/组”。
在“添加分配”窗格中,选择“用户和组”下的“未选择任何内容”。
搜索并选择要分配给应用程序的用户或组。 例如,
contosouser1@contoso.com
或contosoteam1@contoso.com
。选择“选择” 。
在“选择角色”下,选择想要分配给该用户或组的角色。 如果尚未定义任何角色,则默认角色为“默认访问”。
在“添加分配”窗格中,选择“分配”以将用户或组分配给应用程序。
从应用程序取消分配用户和组
- 按照向应用程序分配用户和组部分中的步骤导航到“用户和组”窗格。
- 搜索并选择要从应用程序取消分配的用户或组。
- 选择“删除”以从应用程序取消分配用户或组。
使用 Azure AD PowerShell 将用户和组分配给应用程序
以提升的权限打开 Windows PowerShell 命令提示符。
运行
Connect-AzureAD
并至少以云应用程序管理员的身份登录。使用以下脚本将用户分配到应用程序:
# 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
示例
此示例使用 PowerShell 将用户 Britta Simon 分配到 Microsoft Workplace Analytics 应用程序。
在 PowerShell 中,将相应的值分配到变量
$username
、$app_name
和$app_role_name
。$username = "britta.simon@contoso.com" $app_name = "Workplace Analytics"
在此示例中,我们并不确切地知道要将哪个应用程序角色名称分配给 Britta Simon。 运行以下命令,使用用户 UPN 和服务主体显示名称获取用户 (
$user
) 和服务主体 ($sp
)。$user = Get-AzureADUser -ObjectId "$username" $sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
运行以下命令以查找服务主体公开的应用角色
$appRoles = $sp.AppRoles # Display the app roles $appRoles | ForEach-Object { Write-Output "AppRole: $($_.DisplayName) - ID: $($_.Id)"
注意
默认的 AppRole ID 为
00000000-0000-0000-0000-000000000000
。 如果未为服务主体定义特定的 AppRole,则会分配此角色。将 AppRole 名称分配到
$app_role_name
变量。 在此示例中,我们要为 Britta Simon 分配“分析员”(访问权限受限)角色。$app_role_name = "Analyst (Limited access)" $appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }
运行以下命令,将用户分配到应用角色。
New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId $user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id
若要将组分配到企业应用,请将 Get-AzureADUser
替换为 Get-AzureADGroup
,并将 New-AzureADUserAppRoleAssignment
替换为 New-AzureADGroupAppRoleAssignment
。
有关如何将组分配到应用程序角色的详细信息,请参阅 New-AzureADGroupAppRoleAssignment 的文档。
使用 Azure AD PowerShell 从应用程序中取消分配用户和组
以提升的权限打开 Windows PowerShell 命令提示符。
运行
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 number].ObjectId
使用 Azure AD PowerShell 删除分配给应用程序的所有用户
- 以提升的权限打开 Windows PowerShell 命令提示符。
使用以下脚本移除分配给应用程序的所有用户和组。
#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
}
}
使用 Microsoft Graph PowerShell 将用户和组分配给应用程序
以提升的权限打开 Windows PowerShell 命令提示符。
运行
Connect-MgGraph -Scopes "Application.ReadWrite.All", "Directory.ReadWrite.All", "AppRoleAssignment.ReadWrite.All"
并至少以云应用程序管理员的身份登录。使用以下脚本将用户分配到应用程序:
#Assign the values to the variables $userId = "<Your user's ID>" $app_name = "<Your App's display name>" $app_role_name = "<App role display name>" $sp = Get-MgServicePrincipal -Filter "displayName eq '$app_name'" #Get the user, the service principal and appRole. $params = @{ "PrincipalId" =$userId "ResourceId" =$sp.Id "AppRoleId" =($sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }).Id } #Assign the user to the AppRole New-MgUserAppRoleAssignment -UserId $userId -BodyParameter $params | Format-List Id, AppRoleId, CreationTime, PrincipalDisplayName, PrincipalId, PrincipalType, ResourceDisplayName, ResourceId
示例
此示例使用 Microsoft Graph PowerShell 将用户 Britta Simon 分配到 Microsoft 工作区分析应用程序。
在 PowerShell 中,将相应的值分配到变量
$userId
、$app_name
和$app_role_name
。# Assign the values to the variables $userId = "<Britta Simon's user ID>" $app_name = "Workplace Analytics"
在此示例中,我们并不知道要将哪个应用程序角色名称分配给 Britta Simon。 运行以下命令,以使用服务主体显示名称获取服务主体 ($sp)。
# Get the service principal for the app $sp = Get-MgServicePrincipal -Filter "displayName eq '$app_name'"
运行以下命令以查找服务主体公开的应用角色。
# Get the app roles exposed by the service principal $appRoles = $sp.AppRoles # Display the app roles $appRoles | ForEach-Object { Write-Output "AppRole: $($_.DisplayName) - ID: $($_.Id)" }
注意
默认的 AppRole ID 为
00000000-0000-0000-0000-000000000000
。 如果未为服务主体定义特定的 AppRole,则会分配此角色。将角色名称分配到
$app_role_name
变量。 在此示例中,我们要为 Britta Simon 分配“分析员”(访问权限受限)角色。# Assign the values to the variables $app_role_name = "Analyst (Limited access)" $appRoleId = ($sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }).Id
准备参数并运行以下命令,将用户分配到应用角色。
# Prepare parameters for the role assignment $params = @{ "PrincipalId" = $userId "ResourceId" = $sp.Id "AppRoleId" = $appRoleId } # Assign the user to the app role New-MgUserAppRoleAssignment -UserId $userId -BodyParameter $params | Format-List Id, AppRoleId, CreationTime, PrincipalDisplayName, PrincipalId, PrincipalType, ResourceDisplayName, ResourceId
若要将组分配到企业应用,请将 Get-MgUser
替换为 Get-MgGroup
,并将 New-MgUserAppRoleAssignment
替换为 New-MgGroupAppRoleAssignment
。
有关如何将组分配到应用程序角色的详细信息,请参阅 New-MgGroupAppRoleAssignment 的文档。
使用 Microsoft Graph PowerShell 从应用程序中取消分配用户和组
以提升的权限打开 Windows PowerShell 命令提示符。
运行
Connect-MgGraph -Scopes "Application.ReadWrite.All", "Directory.ReadWrite.All", "AppRoleAssignment.ReadWrite.All"
并至少以云应用程序管理员的身份登录。获取用户和服务主体
$user = Get-MgUser -UserId <userid> $sp = Get-MgServicePrincipal -ServicePrincipalId <ServicePrincipalId>
获取角色分配的 ID
$assignments = Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $sp.Id | Where {$_.PrincipalDisplayName -eq $user.DisplayName}
运行以下命令,以显示分配给应用程序的用户列表
$assignments | Select *
运行以下命令以移除 AppRole 分配。
Remove-MgServicePrincipalAppRoleAssignedTo -AppRoleAssignmentId '<AppRoleAssignment-id>' -ServicePrincipalId $sp.Id
使用 Microsoft Graph PowerShell 删除分配给应用程序的所有用户和组
运行以下命令,以移除分配给应用程序的所有用户和组。
$assignments | ForEach-Object {
if ($_.PrincipalType -in ("user", "Group")) {
Remove-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $sp.Id -AppRoleAssignmentId $_.Id }
}
使用 Microsoft Graph API 将用户和组分配给应用程序
若要向应用程序分配用户和组,请至少以云应用程序管理员身份登录到 Graph 资源管理器。
你需要同意以下权限:
Application.ReadWrite.All
、Directory.ReadWrite.All
和AppRoleAssignment.ReadWrite.All
。若要授予应用角色分配,需要三个标识符:
principalId
:要向其分配应用角色的用户或组的 ID。resourceId
:定义应用角色的资源 servicePrincipal 的 ID。appRoleId
:要分配给用户或组的 appRole(在资源服务主体上定义)的 ID。
获取企业应用程序。 按
DisplayName
筛选。GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq '{appDisplayName}'
记录响应正文中的以下值:
- 企业应用程序的对象 ID
- 分配给用户的 AppRole ID。 如果应用程序不公开任何角色,则将为用户分配默认访问角色。
注意
默认的 AppRole ID 为
00000000-0000-0000-0000-000000000000
。 如果未为服务主体定义特定的 AppRole,则会分配此角色。通过按用户的主体名称进行筛选来获取用户。 记录用户的对象 ID。
GET https://graph.microsoft.com/v1.0/users/{userPrincipalName}
请将该用户分配到应用程序。
POST https://graph.microsoft.com/v1.0/servicePrincipals/{resource-servicePrincipal-id}/appRoleAssignedTo { "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "resourceId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1", "appRoleId": "00000000-0000-0000-0000-000000000000" }
在此示例中,
resource-servicePrincipal-id
和resourceId
都表示企业应用程序。
使用 Microsoft Graph API 从应用程序取消分配用户和组
若要从应用程序取消分配所有用户和组,请运行以下查询。
获取企业应用程序。 按
displayName
筛选。GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq '{appDisplayName}'
获取应用程序的
appRoleAssignments
列表。GET https://graph.microsoft.com/v1.0/servicePrincipals/{id}/appRoleAssignedTo
通过指定
appRoleAssignment
ID 移除appRoleAssignments
。DELETE https://graph.microsoft.com/v1.0/servicePrincipals/{resource-servicePrincipal-id}/appRoleAssignedTo/{appRoleAssignment-id}
Microsoft Graph 浏览器不支持直接批量删除应用角色分配。 需要单独删除每个分配。 但是,可以使用 Microsoft Graph PowerShell 自动执行此过程,以循环访问并移除每个分配