Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用microsoft graph api为azure ad中的用户分配角色_Azure_Azure Active Directory_Rbac_Azure Rbac - Fatal编程技术网

如何使用microsoft graph api为azure ad中的用户分配角色

如何使用microsoft graph api为azure ad中的用户分配角色,azure,azure-active-directory,rbac,azure-rbac,Azure,Azure Active Directory,Rbac,Azure Rbac,我在应用程序注册清单中创建了以下角色: "appRoles": [ { "allowedMemberTypes": [ "User" ], "displayName": "Student", "id": "d1c2ade8-98f8-45fd-aa4a-6d06b947c66f",

我在
应用程序注册清单中创建了以下角色:

"appRoles": [
   {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Student",
      "id": "d1c2ade8-98f8-45fd-aa4a-6d06b947c66f",
      "isEnabled": true,
      "description": "Student",
      "value": "Student"
    }
  ],
现在我正在使用
approvalinsignment
api为用户分配角色。我正在关注这一点。在本页中,它说我们需要在json主体中使用以下api:

POST https://graph.microsoft.com/v1.0/servicePrincipals/{id}/appRoleAssignments
Content-Type: application/json
Content-Length: 110

{
  "principalId": "principalId-value",
  "resourceId": "resourceId-value",
  "appRoleId": "appRoleId-value"
}
我无法理解我应该在
principalId
resourceId
appRoleId
中使用什么。根据该页,它说:

principalId: The id of the client service principal to which you are assigning the app role.
resourceId: The id of the resource servicePrincipal (the API) which has defined the app role (the application permission).
appRoleId: The id of the appRole (defined on the resource service principal) to assign to the client service principal.
但我能理解的是,
principalId是我在active directory中要为其分配角色的用户的ID。

在我的情况下,这是下图中的ObjectId:

这对吗

resourceId
是坦能id,
approvleID
是我在创建应用程序角色时使用的id,其上方为
d1c2ade8-98f8-45fd-aa4a-6d06b947c66f

如果我用python发出请求,那么就把它们放在一起

token = get_token()
headers = {'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json'}

user_data = {
    "principalId": "1bc79085-12qw-4fad-8da8-647f4b4b2927",  
    "resourceId": "c01b6482-3ccd-4533-8c98-a7c5e8067cc8",   
    "appRoleId": "d1c2ade8-98f8-45fd-aa4a-6d06b947c66f"  
}
j_data = json.dumps(user_data)
conn = http.client.HTTPSConnection('graph.microsoft.com')
conn.request("POST", "/v1.0/servicePrincipals/1bc79085-12qw-4fad-8da8-647f4b4b2927/appRoleAssignments", j_data, headers)
response = conn.getresponse()
rdata = response.read()
我得到以下回应:

{
  "error": {
    "code": "Request_ResourceNotFound",
    "message": "Resource '1bc79085-12qw-4fad-8da8-647f4b4b2927' does not exist or one of its queried reference-property objects are not present.",
    "innerError": {
      "date": "2020-10-26T05:16:35",
      "request-id": "1c87a140-7bc9-499d-82dd-bc1dcb54e075",
      "client-request-id": "1c87a140-7bc9-499d-82dd-bc1dcb54e075"
    }
  }
}
谁能帮我调试一下吗。请帮忙。谢谢

编辑:

错误:

{
    "error": {
        "code": "Request_ResourceNotFound",
        "message": "Resource '261eda4b-6eee-45ba-a176-259960603409' does not exist or one of its queried reference-property objects are not present.",
        "innerError": {
            "date": "2020-10-26T07:09:38",
            "request-id": "8dc2ea73-63e5-45b5-8127-445df777c1e1",
            "client-request-id": "8dc2ea73-63e5-45b5-8127-445df777c1e1"
        }
    }
}
Json:

发布URL:

获取Url以获取对象id:eq'{useracces}'

在本例中,
{id}
{resourceId value}
都是资源服务主体的对象id,资源服务主体是与您在其中创建的Azure AD应用程序关联的企业应用程序

{principalId value}
将是用户的对象id

{appRoleId value}
是您在清单中创建的应用程序角色的id

更新:

获取服务主体的对象id的步骤是正确的

如果您想使用Graph API获取它,可以这样做:

GET https://graph.microsoft.com/v1.0/serviceprincipals?$select=id&$filter=displayName eq '{app name}'
在本例中,
{id}
{resourceId value}
都是资源服务主体的对象id,资源服务主体是与您在其中创建的Azure AD应用程序关联的企业应用程序

{principalId value}
将是用户的对象id

{appRoleId value}
是您在清单中创建的应用程序角色的id

更新:

获取服务主体的对象id的步骤是正确的

如果您想使用Graph API获取它,可以这样做:

GET https://graph.microsoft.com/v1.0/serviceprincipals?$select=id&$filter=displayName eq '{app name}'

谢谢为了获得
对象id
,我进入了应用程序注册,然后单击相应的应用程序,并从应用程序概述中复制了对象id。它是否正确,或者我们是否需要从其他地方获取对象id。如果我获取对象id的步骤正确,然后我不确定为什么我仍然收到相同的
请求\u ResourceNotFound
错误。使用您提到的api,我得到了以下响应
{“@odata.context”:https://graph.microsoft.com/v1.0/$metadata#servicePrincipals(id)”,“value”:【】}
@SAndrew请共享您现在得到的已完成的
请求\u ResourceNotFound
错误。并共享
/serviceprincipals?$select=id&$filter=displayName eq'{app name}'
@SAndrew So
261eda4b-6eee-45ba-a176-259960603409
服务主体的对象id正确吗?你能提供一个你在Azure portal上从哪里得到它的截图吗?让我们看看。谢谢。为了获得
对象id
,我进入了应用程序注册,然后单击相应的应用程序,并从应用程序概述中复制了对象id。它是否正确,或者我们是否需要从其他地方获取对象id。如果我获取对象id的步骤正确,然后我不确定为什么我仍然收到相同的
请求\u ResourceNotFound
错误。使用您提到的api,我得到了以下响应
{“@odata.context”:https://graph.microsoft.com/v1.0/$metadata#servicePrincipals(id)”,“value”:【】}
@SAndrew请共享您现在得到的已完成的
请求\u ResourceNotFound
错误。并共享
/serviceprincipals?$select=id&$filter=displayName eq'{app name}'
@SAndrew So
261eda4b-6eee-45ba-a176-259960603409
服务主体的对象id正确吗?你能提供一个你在Azure portal上从哪里获得它的截图吗?让我们来看看。
GET https://graph.microsoft.com/v1.0/serviceprincipals?$select=id&$filter=displayName eq '{app name}'