首页 > 解决方案 > 如何在自定义应用同意策略中指定权限?

问题描述

New-AzureADMSPermissionGrantConditionSet我已使用并遵循MS docs成功制定了自定义应用同意政策。我指定ClientApplicationIds了,效果很好。

现在我还想指定必须匹配的权限。在权限上,文档说:

有关 New-AzureADMSPermissionGrantConditionSet 的权限条件的文档

我需要帮助理解(和访问)“API 的 ServicePrincipal 对象的 OAuth2Permissions 属性”中的权限 ID。

文档指的是什么 ServicePrincipal?应用程序的家庭租户中的一个,还是使用该应用程序的租户中的一个?如果尚未同意该应用程序,则使用该应用程序的租户中没有 ServicePrinciple,因此我遇到了先有鸡还是先有蛋的问题。

我期望获得的权限是什么?我想知道为什么 MS 不只是让我们将范围作为字符串传递,例如emailmail.read等等。我不明白在这个特定的上下文中权限是什么。

标签: azureazure-active-directory

解决方案


我需要帮助理解(和访问)“API 的 ServicePrincipal 对象的 OAuth2Permissions 属性”中的权限 ID。

权限 ID 是指您在客户端应用注册中添加id的 API(即在 API 中定义)的 Delegated 权限。oauth2Permissions

例如,您在租户 A 中创建了一个多租户客户端应用程序,您添加了Microsoft Graph的Mail.Read Delegated 权限,默认情况下,还会自动有一个Delegated 权限,因此您的客户端应用程序中总共有两个权限。User.Read API permissions

现在,您想在租户 B 中使用自定义应用同意策略,您希望用户同意这两个权限,那么-Permissions应该是idMicrosoft Graph 中定义的两个权限中的一个,要轻松找到它,只需导航到客户端应用在租户 A ->Manifest中,您可以获得id如下所示的 s。

在此处输入图像描述

完整的命令应该是

New-AzureADMSPermissionGrantConditionSet `
    -PolicyId "joy-custom-policy" `
    -ConditionSetType "includes" `
    -PermissionType "delegated" `
    -ResourceApplication "00000003-0000-0000-c000-000000000000" `
    -Permissions @("e1fe6dd8-ba31-4d61-89e7-88639da4683d","570282fd-fa5c-430d-a7fd-fc8dc98a9dca")

在另一种情况下,您在客户端应用程序中使用自定义 API(在租户 A 中创建)而不是 Microsoft API。

如果是这样,你需要先在租户B中为API App授予管理员同意,否则会报错The app needs access to a service (\"api://tenantA/myapi\") that your organization (tenant B) has not subscribed to or enabled,或者你可以使用管理员帐户New-AzureADServicePrincipal -AppId <appid of the API app>在租户B中运行,它也可以工作,同意后,普通用户将能够同意您在策略中定义的权限。


注意:有时,您可能会收到如下错误This app may be risky

在此处输入图像描述

这意味着 Microsoft 检测到有风险的最终用户同意请求,该请求将需要升级到管理员同意,如果您仍然希望用户同意该权限,您需要先禁用基于风险的升级同意,然后用户将能够同意该权限。


推荐阅读