我创建了一个AzureAD应用程序,为其分配了所需的GraphAPI权限,并创建了ServicePrincipal。到目前为止,一切都很好,除了我无法找出如何授予那些需要的GraphAPI权限的管理员同意。我试图通过Powershell授予管理员权限,而没有管理员的登录提示。
我发现了
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中运行,因此不能选择等待弹出提示。
答案 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)
答案 2 :(得分:0)
如果您想一次授予所有应用程序权限和委派权限的管理员同意,那么没有管理员用户交互方式,没有这样的powershell命令可以做到这一点。
您的选择是使用与自动化RunAs帐户相关的服务主体来获取令牌,然后使用令牌在运行簿中调用Microsoft Graph Grant an appRoleAssignment for a service principal
和Create 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