如何通过 Azure PowerShell 授予用户对 3rd 方企业应用程序的同意?

时间:2021-07-19 02:53:56

标签: azure azure-active-directory azure-powershell azure-ad-graph-api azure-ad-b2b

我们有一个 Azure PowerShell 脚本来自动配置客户订阅中的资源。作为该过程的一部分,我们根据托管在我们自己的图像库中的自定义图像部署 VM。为此,我们要求客户在其租户中授予对我们企业应用程序的访问权限(用户同意)。

截至目前,我们通过 OAuth2 链接实现这一点,我们要求他们使用自己的租户 ID 进行编辑并在浏览器中打开:

https://login.microsoftonline.com/<customer-tenant-id>/oauth2/authorize?client_id=cd3df191-153a-4ae1-9766-5fe7a7f3032e&response_type=code&redirect_uri=https%3A%2F%2Fwww.microsoft.com

此链接对他们进行身份验证并要求接受请求的权限:

enter image description here

之后,我们的企业应用程序应该在他们的订阅中列出,并具有以下权限:

enter image description here

我们希望通过我们的部署脚本以编程方式解决这个先决条件。我们有什么办法可以通过 Azure PowerShell 实现这一点吗?

无济于事,我在网上查了好几页,还有几个类似的问题。它们在请求管理员同意而不是用户同意的意义上有所不同(请注意,我们只需要用户同意,请参见下面的屏幕截图)。此外,有些问题特定于 Azure CLI 或只是 Azure 门户(因为我们正在使用 Azure PowerShell,所以不是我们的选项)。

enter image description here

PS:抱歉,我对 Azure AD 和一般的同意框架缺乏了解。

1 个答案:

答案 0 :(得分:0)

同意可用于授予应用角色(应用权限)和委派权限。

您在此处尝试做的是创建委托权限授予。具体来说,您试图代表单个用户(而不是代表所有用户)授予委派权限。

您无法使用 Azure PowerShell 执行此操作。

但是,您可以使用 Microsoft Graph PowerShell 执行此操作。您使用的 cmdlet 将是 New-MgOauth2PermissionGrant。此 cmdlet 将 Microsoft Graph API 调用到 create a delegated permission grant。 PowerShell cmdlet 需要以下参数:

  • ClientId - 客户端应用程序的服务主体的对象 ID。这是将获得特权的服务主体。
  • ConsentType - 在这种情况下,这应该是“委托人”,表示您要代表单个委托人(用户)授予此委托权限。
  • PrincipalId - 这是用户的对象 ID,代表客户端应用程序将能够执行的操作。
  • ResourceId - API 服务主体的对象 ID。这是表示 API 的服务主体,用于公开您要授予的委托权限。
  • Scope - 要授予的权限的空格分隔列表。

因此,例如,如果我们想代表用户主体名称为 bob@example.com 的用户授予 Microsoft Graph 委派权限 User.Read,我们可以执行以下操作:< /p>

$userUpn = "bob@example.com"
$clientAppId = "738a2731-dd81-4263-824b-74cf6dee9da0"
$resourceSpn = "https://graph.microsoft.com"
$scope = "User.Read"

# Retrieve the user, and the client and resource service principals
$user = Get-MgUser -Filter "userPrincipalName eq '$userUpn'"
$client = Get-MgServicePrincipal -Filter "appId eq '$clientAppId'"
$resource = Get-MgServicePrincipal -Filter "servicePrincipalNames/any(n:n eq '$resourceSpn')"

# Grant the delegated permissions for Microsoft Graph to the client, on behalf of the user
$grant = New-MgOAuth2PermissionGrant `
    -ClientId $client.Id `
    -ConsentType "Principal" `
    -PrincipalId $user.Id `
    -ResourceId $resource.Id `
    -Scope $scope
相关问题