将管理员同意授予Azure应用程序以获取GraphAPI权限Powershell

时间:2020-10-30 10:56:27

标签: azure powershell azure-active-directory microsoft-graph-api

我创建了一个AzureAD应用程序,为其分配了所需的GraphAPI权限,并创建了ServicePrincipal。到目前为止,一切都很好,除了我无法找出如何授予那些需要的GraphAPI权限的管理员同意。我试图通过Powershell授予管理员权限,而没有管理员的登录提示。

enter image description here

我发现了

    GET https://login.microsoftonline.com/{tenant}/v2.0/adminconsent?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=http://localhost/myapp/permissions
&scope=
https://graph.microsoft.com/calendars.read
https://graph.microsoft.com/mail.send

并根据我的需要进行了修改。我在响应中得到的只是html代码。 (没有记录是否存在,以及请求中包含什么标头,这使它更加混乱)

我没有机会创建用于授予管理员同意的管理员App / ServicePrincipal。

这一切都将在Azure Runbook中运行,因此不能选择等待弹出提示。

4 个答案:

答案 0 :(得分:0)

查看此博客:Provide Admin Consent for Azure AD Applications Programmatically

您可以使用以下命令来实现:

$apiUrl = "https://graph.microsoft.com/beta/oauth2PermissionGrants"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)" }  -Method POST -Body $($body | convertto-json) -ContentType "application/json"

答案 1 :(得分:0)

如果您希望通过UI授予管理员同意,则在添加权限的按钮旁边应该有一个按钮:

enter image description here

答案 2 :(得分:0)

如果您想一次授予所有应用程序权限和委派权限的管理员同意,那么没有管理员用户交互方式,没有这样的powershell命令可以做到这一点。

您的选择是使用与自动化RunAs帐户相关的服务主体来获取令牌,然后使用令牌在运行簿中调用Microsoft Graph Grant an appRoleAssignment for a service principalCreate a delegated permission grant(oAuth2PermissionGrant),不要忘记授予您的RunAs Account服务主体所需的权限。

要获取令牌,可以使用以下命令。获取令牌后,使用Invoke-RestMethod调用API。

$context = Get-AzContext
$accesstoken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://graph.microsoft.com").AccessToken

答案 3 :(得分:0)

如果您想以编程方式进行:

az 广告应用权限 admin-consent --id $appId