【问题标题】:Programmatically assign users to Azure AD Application using Graph API使用 Graph API 以编程方式将用户分配给 Azure AD 应用程序
【发布时间】:2017-09-16 05:16:50
【问题描述】:

我正在尝试编写一个脚本来使用 Graph API 将用户分配给 Azure AD 应用程序 (servicePrincipal)。我正在我的沙箱中对此进行测试,我已经在其中定义了应用程序并为其分配了用户。但是,当我查询 servicePrincipal 时,我在响应中的任何地方都看不到用户。

问题:

  1. 基于documentation,不应该有appRoleAssignment吗?

  2. 文档说这个字段是只读的,那么你应该如何分配用户?

【问题讨论】:

    标签: azure azure-active-directory azure-ad-graph-api


    【解决方案1】:

    查询Graph API时,可以通过导航属性获取用户的appRoleAssignments

    https://graph.windows.net/tenant-id/users/user-id/appRoleAssignments?api-version=1.6
    

    您可以通过发送 HTTP POST 来创建分配:

    https://graph.windows.net/tenant-id/users/user-id/appRoleAssignments?api-version=1.6
    

    您需要发送的对象如下所示:

    {
      "id": "id-of-role",
      "principalId": "objectId-of-user",
      "resourceId": "objectId-of-service-principal"
    }
    

    如果您的应用没有任何角色,但您仍想分配用户,似乎您可以将 id 设置为全零:

    如果资源未声明任何权限,则必须指定默认 id(零 GUID)。

    比如:

    {
      "id":"00000000-0000-0000-0000-000000000000",
      "resourceId": "a27d8321-3dc6-44a1-bf19-2546a9f2806e",
      "principalId": "c4f810b8-2ea1-4580-9595-30275a28c2a2"
    }
    

    【讨论】:

    • 非常感谢。我试图查看是否可以使用更新的 MSFT Graph API 进行复制:developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/…,但这很棒。
    • 我正在为此苦苦挣扎。如果我从租户那里得到对象 id 或应用程序的应用程序 id,我总是得到错误资源不存在
    • 这是您需要的服务主体的对象 ID,而不是应用程序。您可以在 Azure 门户的 Azure AD 刀片中的企业应用程序下找到服务主体。在其属性中,您会找到对象 ID。
    • 我不断收到“一个或多个属性无效。”...互联网上的任何地方似乎都没有答案。
    • 提出一个新问题。评论用于向现有答案添加输入。
    【解决方案2】:

    现在接受的答案有点过时了。 您需要的网址是:

    https://graph.microsoft.com/v1.0/<tenantID>/users/<userObjectID>/appRoleAssignments
    

    发送一个 HTTP POST,内容为:

    {
      "principalId": "<objectId-of-user>",
      "resourceId": "<objectId-of-service-principal>",
      "principalType": "User",
      "appRoleId": "<id of role>"
    }
    

    最简单的测试方法是通过Microsoft Graph Explorer

    或者我这样做的方式是通过 bash 脚本,调用 azure cli

    cat <<- EOF > roleAssignment.json
    {
      "appRoleId": "${UUID}",
      "principalId": "{$USER_ID}",
      "principalType": "User",
      "resourceId": "${SP}"
    }
    EOF
    
    az rest --method post --headers Content-type="application/json" --url "https://graph.microsoft.com/v1.0/${TENANT_ID}/users/${USER_ID}/appRoleAssignments" --body @roleAssignment.json
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      相关资源
      最近更新 更多