【问题标题】:add API permissions to application Azure AD with PATCH graph.microsoft.com API使用 PATCH graph.microsoft.com API 向应用程序 Azure AD 添加 API 权限
【发布时间】:2021-11-03 07:55:44
【问题描述】:

我正在尝试通过 patch 方法向我的应用程序添加 API 权限。

我正在尝试添加 4 个权限。

$appPermissionsRequired = @('RoleManagement.ReadWrite.Directory', 'PrivilegedAccess.ReadWrite.AzureADGroup', 'Group.read.all', 'Directory.read.all')

我有另一种方法找到权限的正确 ID,然后将其放入列表“角色分配”

$RoleAssignments = @()
Foreach ($AppPermission in $appPermissionsRequired) {

    $RoleAssignment = $targetSp.AppRoles | Where-Object { $_.value -eq $AppPermission }

    $RoleAssignments += $RoleAssignment

}

问题是当我运行补丁方法时它给了我一个:“code”:“Request_BadRequest

整个错误信息:

WARNING: {"error":{"code":"Request_BadRequest","message":"Specified HTTP method is not allowed for the request target.","innerError":{"date":"2021-11-03T07:37:41","request-id":"28769332-907b-47dc-bc98-f45754e17226","client-request-id":"28769332-907b-47dc-bc98-f45754e17226"}}}

 foreach ($RoleAssignment in $RoleAssignments) {
            $restSplat = @{
                Method  = "PATCH"
                uri     = "https://graph.microsoft.com/v1.0/applications?`$filter=appId eq '$appId'"
                headers = @{"Authorization" = "Bearer $AADToken"; "Content-Type" = "application/json"}
                body    = @{ 
                    requiredResourceAccess = @(
                        @{
                            resourceAppId  = $targetSp.appId
                            resourceAccess = @(
                                @{
                                    id   = $RoleAssignment.Id
                                    type = "Role"
                                }
                            )
                        }    
                    )
                } | ConvertTo-Json -Depth 4
            } 
            $restSplat
            $rest = (Invoke-RestMethod @restSplat).Value
        }

【问题讨论】:

  • 查看文档中的 URL:docs.microsoft.com/en-us/graph/api/…。您不能使用基本 /applications 端点进行更新。
  • 我不明白,为什么我不能这样做?那我可以用另一种方式吗?
  • 您需要使用文档中的 URL:/applications/。您可以从应用程序对象中获取 objectId。
  • 所以现在我收到了{ "error": { "code": "Request_BadRequest", "message": "Specified HTTP method is not allowed for the request target.", "innerError": { "date": "2021-11-03T10:20:42", "request-id": "bd70d05e-2be5-4a2a-93e6-970d9bff2bf6", "client-request-id": "89150a2f-14eb-9a32-3bd6-725307c4fb37" } } }
  • 和:方法不允许 - 405 - 151m

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


【解决方案1】:

您正在调用没有PATCH 操作的PATCH https://graph.microsoft.com/v1.0/applications,因为它用于列表:GET /applications 和创建:POST /applications。

要使用PATCH 操作为应用程序更新requiredResourceAccess,您需要调用PATCH /applications/{directoryObjectId}。请注意,directoryObjectId 不是 appId,而是 Azure 门户上或来自 Get /applications 的应用程序的对象 Id

代替

PATCH https://graph.microsoft.com/v1.0/applications?`$filter=appId eq '$appId'

使用

PATCH https://graph.microsoft.com/v1.0/applications/object-id

请记住,此操作既不会添加管理员对权限的同意,也会替换属性,因此请运行一次性请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2019-06-19
    • 2019-12-14
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多