【问题标题】:Error while trying to assign user to app尝试将用户分配给应用程序时出错
【发布时间】:2017-12-05 14:52:23
【问题描述】:

如标题所示,我在尝试将用户分配给 AAD 应用程序时遇到错误。 这是我收到的请求和错误

显然它与 API 的版本有关,但即使更改 api-version 参数,我也无法使其工作。

更新: 当我将请求 url 修改为 https://graph.microsoft.com/v1.0/... 时,出现以下错误:Unsupported segment type. ODataQuery: users/{userid}/appRoleAssignments

更新 2: 即使使用测试版,这似乎也不起作用:

更新 3: 这在 MS Graph 的 beta 版本中是否仍然可用?否则是否有任何替代方案(除了powershell和graph api)来以编程方式实现我想要的 https://graph.microsoft.com/beta/users/{userId}/appRoleAssignments/{appRoleId}

仍然收到Unsupported segment type 错误

【问题讨论】:

  • 您到底想完成什么?您使用的 URL 不是 Microsoft Graph API 调用。
  • 我正在尝试以编程方式将用户分配给广告应用
  • @MarcLaFleur 他们不是 Microsoft Graph API 调用吗?
  • 我设法使用相同的 url (graph.microsoft.com/v1.0{tenantid}/users/{userid}/) 获取用户详细信息

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


【解决方案1】:

Marc 的回答是正确的 - 有几点需要注意: 1. 这仅在 /beta 中可用,不推荐用于生产。 2. 有一个错误阻止了它的工作。

要在生产中执行此操作,您当前唯一的选择是使用 Azure AD Graph API。您会看到我们的文档建议在任何地方都使用 Microsoft Graph,但在某些地方与 Azure AD Graph 存在一些差距。

有关 Microsoft Graph 与 Azure AD Graph 支持的内容的更多信息,请参阅此主题 https://dev.office.com/blogs/microsoft-graph-or-azure-ad-graph

API 调用与 Marc 上面的相同,但具有不同的根 URL 和版本控制方案。所以它看起来像这样:

POST https://graph.windows.net/{tenantId}/users/{userId}/appRoleAssignments?api-version=1.6 { "id": "31952ade-a03c-414c-8340-2f11e9099106", "principalId": "84b80893-8749-40a3-97b7-68513b600544", "principalType": "User", "resourceId": "29c7ed43-a9a1-4b31-8a64-fc90c3ca4e73" }

查看older blogAAD Graph reference docs

希望这会有所帮助,

【讨论】:

    【解决方案2】:

    您在此处使用的 URL 不是有效的 Microsoft Graph 调用。

    作为 REST API,URL 的每个段实际上都是一个 API 命名空间或方法(取决于它是否是最终的 URI 段)。为了说明,让我们分解一个用于检索user 的URI:

    GET https://graph.microsoft.com/v1.0/users/{userid}
    

    把它分解成我们得到的组件:

    • GET 是定义我们正在执行的操作的“HTTP 动词”。这遵循标准的 CRUD 模型:

      • POST = 创建实体或记录
      • GET = 读取实体或记录
      • PATCH = 更新实体或记录
      • DELETE = 删除实体或记录
    • https://graph.microsoft.com 是 Microsoft Graph 本身的地址。

    • /v1.0 是您要调用的 API 版本(当前为 /v1.0/beta)。

    • /users 告诉 Graph 您要访问 user 集合

    • /{userid} 告诉 Graph 您在 /users 集合中寻找的特定用户

    由于 /{userid} 是 URL 指定的最后一个段,因此它将从 Azure Active Directory 返回该单独的 User 记录的 JSON 表示形式。

    您可以在Microsoft Graph Documentation 中的文章Traverse Microsoft Graph 中找到有关 Microsoft Graph 如何组织的详细说明。

    在您的问题中,您描述了两个不同的调用:

    POST https://graph.microsoft.com/{GUID}
    POST https://graph.microsoft.com/v1.0/{GUID}
    

    您收到错误的原因是您发送的{GUID} 没有命名空间或方法。它实际上不知道你要求它做什么。由于 Microsoft Graph 处理大量不同的服务(SharePoint、Azure AD、Exchange、Planner、Teams、Groups 等),它甚至无法开始猜测您的目标是哪个服务。

    根据您所做的附加评论,听起来您正在尝试使用appRoleAssignment。此端点仍处于预览阶段,因此仅在 /beta 版本中可用。它还仅支持GETUPDATEDELETE 方法(UPDATE 将用户添加到appRoleAssignmentDELETEappRoleAssignment 中删除用户)。

    因此,您的呼叫应如下所示:

    https://graph.microsoft.com/beta/users/{userId}/appRoleAssignments/{appRoleId}
    

    您可以在 Update approleassignment 找到此通话的完整文档。

    【讨论】:

    • 即使使用这种格式graph.microsoft.com/beta/users{userId}/appRoleAssignments/{appRoleId} 仍然收到错误:不支持的段类型。 ODataQuery:用户/{userid}/appRoleAssignments/{appRoleId}
    • 顺便说一句,因为它是一个测试版,有没有什么替代方案可以在c#中实现我想要的?感谢您的回复
    • 您在users{userId} 之间缺少/.../beta/users/{userId}/...
    • 不,只有 stackoverflow 以这种方式对其进行格式化(我猜是因为 '{' 不被视为有效的 url 字符)
    猜你喜欢
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多