Azure active directory Azure AD:授予服务主体的批准失败,带有“批准”;代码";:&引用;请求“U ResourceNotFound”;

Azure active directory Azure AD:授予服务主体的批准失败,带有“批准”;代码";:&引用;请求“U ResourceNotFound”;,azure-active-directory,microsoft-graph-api,azure-service-principal,Azure Active Directory,Microsoft Graph Api,Azure Service Principal,我正在尝试为应用程序创建“服务主体”,并使用Microsoft graph API授予管理员权限许可 我遵循以下步骤: 使用graph API在租户中创建应用程序。我的请求机构是: { “displayName”:“AppWithPermissions”, “requiredResourceAccess”:[ { “resourceAppId:“00000002-0000-0ff1-ce00-000000000000”, “资源访问”:[ { “id”:“dc890d15-9560-4a4c-9

我正在尝试为应用程序创建“服务主体”,并使用Microsoft graph API授予管理员权限许可

我遵循以下步骤:

  • 使用graph API在租户中创建应用程序。我的请求机构是:

    {
    “displayName”:“AppWithPermissions”,
    “requiredResourceAccess”:[
    {
    “resourceAppId:“00000002-0000-0ff1-ce00-000000000000”,
    “资源访问”:[
    {
    “id”:“dc890d15-9560-4a4c-9b7f-a736ec74ec40”,
    “类型”:“角色”
    }
    ]
    }
    ]
    }
    
  • 为上述创建的应用程序创建了服务主体。创作是成功的

  • 现在,我想使用graph API以编程方式向每个分配的权限授予管理员许可

  • 为了授予应用程序权限,我在API服务主体的ApprovaleSignedTo集合中创建了一个应用程序角色分配: 请求如下:

    后请求:

    https://graph.microsoft.com/v1.0/servicePrincipals/{id}/approvalsignedto
    
    请求机构:

    {
    “principalId”:“principalId_id”,
    “资源id”:“资源id”,
    “批准id”:“批准id”
    }
    
  • 这里,

  • “主体id”是在上述步骤2中创建的服务主体的“id”
  • “approle\u id”是您要授予的approle的id。(从“requiredResourceAccess”中的“resourceAccess”数组中获取“id”值)
  • http请求url中的“id”和“资源id”是相同的。(取自“requiredResourceAccess”中的“resourceAppId”值,该值对应于上述“approle_id”)
  • 运行查询后,我得到错误404。 “代码”:“请求资源未找到” 用于“资源id”/“id”字段

    • 添加屏幕截图以更好地理解:
  • 应用程序创建:
  • 服务主体创建:
  • 授予服务负责人批准:
  • 我对在哪里使用哪个ID感到困惑,并且没有从文档中得到一个清晰的概念。有谁能回答我的问题吗?提前谢谢。

    描述不太清楚

    简单来说:

    principalId
    :通常是您的服务主体id

    resourceId
    :通常是您的服务主体id

    appRoleId
    :对于appRoleId,您可以通过请求
    GET来找到它https://graph.microsoft.com/v1.0/servicePrincipals/{id}。

    授予服务负责人批准:

    看起来您使用的是appId而不是id

    在应用程序角色分配中,
    resourceId
    是资源应用程序的servicePrincipalid(在您的例子中,是API)。在应用程序对象的requiredResourceAccess中,使用的是不同的值appId

    要查找您知道其应用id的服务主体的id

    GEThttps://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId等式“{app id}”
    

    响应将包含servicePrincipal对象的id属性,您可以在创建应用程序角色分配时使用该属性。

    感谢您的响应。在我的例子“appRoles”:[]数组为NULL。您在创建服务主体时是否执行了任何额外的步骤?我还有一个问题:我们没有从“requiredResourceAccess”数组元素中获取“ApprovleId”?@PoojaDabhade您可以在应用程序清单中找到它,转到Azure ad>应用程序注册>您的应用程序>清单查看:我也做了同样的事情,但出现了如所附屏幕截图所示的错误:@PoojaDabhade尝试使用自定义ApprovleId,您可以通过在AD中自定义清单来自定义批准,转到Azure AD>应用程序注册>您的应用程序>清单以查找批准并对其进行自定义,请参见:我也尝试过。但现在面临的另一个问题是:谢谢菲利普。让我澄清一下我的理解,{resourceId}、{principalId}与servicePrincipal对象的id属性相同。但我仍然没有得到{appRoleId}的值应该是多少?在我对servicePrincipal对象的响应中,“appRoles”数组为空。它与“requiredResourceAccess”数组中的值无关?如果检索API的
    servicePrincipal
    (例如
    GET…/servicePrincipals?$filter=appId eq“0000000 3-0000-0000-c000-0000000”
    ),结果将具有一个
    appRoles
    属性,该属性将为该API定义所有应用程序角色。然而,在您的例子中,您似乎已经知道{appRoleId}值(例如5b567255-7703-4780-807c-7be8301ae99b、75359482-378d-4052-8f01-80520e7db3cd等),所以您可以直接使用它。我不能将这些值(例如5b567255-7703-4780-807c-7be8301ae99b、75359482-378d-4052-8f01-80520e7db3cd等)用于{appRoleId}。我收到以下错误:“消息”:“未在应用程序上找到正在分配的权限”。在创建应用程序时,我们需要为应用程序定义“appRoles”数组。您是否可以更新您的问题,以包括您为创建应用程序角色分配(包括正文)而进行的查询?我已使用步骤和屏幕截图更新了我的问题。请参考。