【问题标题】:Guest Account queries to Azure AD or Graph in Single tenant Application在单租户应用程序中对 Azure AD 或 Graph 的来宾帐户查询
【发布时间】:2017-10-15 11:24:03
【问题描述】:

我正在寻找支持以下场景的信息。

我们邀请来自其他 Azure AD 的用户作为来宾加入我们的 Azure AD,出于特定目的将他们放入一个组中,并且需要能够从我们的 Azure AD 中获取该组的来宾用户成员。当尝试使用图表时,我们无法连接到我们的图表,因为访客帐户接缝一直询问自己的图表。在网上搜索了很长时间,测试了很多示例应用程序,乍一看似乎可以支持我们的场景,但到目前为止还没有运气。

我们想要注册单个租户应用的原因之一是能够管理我们应用的许可部分并单独管理对我们应用的访问,而不是要求客户 IT 参与设置过程建立并维护他们在多租户解决方案中的一部分。

我现在已经迷失了方向,只需要在某个方向上推动如何继续。

【问题讨论】:

  • 我相信 AAD 应该支持您的方案,但目前尚不清楚您目前正在尝试什么以及您目前在哪里失败。如果您可以分享有关您当前身份验证方法的更多详细信息,以及您收到的具体错误消息或行为,我相信社区可以帮助您解决问题。
  • 肖恩见下面的评论..

标签: c# function azure graph azure-active-directory


【解决方案1】:

正如 Shawn Tabrizi 所提到的,Microsoft Graph 确实支持从其他租户检索来宾用户的成员。下面是一个示例供您参考:

GET: https://graph.microsoft.com/v1.0/groups/{groupId}/members 
authorization: bearer {access_token}

结果

关于这个休息的更多细节,你可以参考下面的链接。如果您对此 REST 仍有问题,请随时告诉我。

List members

【讨论】:

  • 在我们的组中查找来宾成员正在工作,但我希望来宾在我们的租户中找到他是 memberOf 的组。找不到对此的支持。在所有组中寻找用户会有点麻烦。我希望能够在我们的租户中找到应用程序用户 memberOf 无法找到将查询指向我们租户的方法。登录用户总是在家庭租户中看到他的 memberOf。企业应用程序将需要与可以工作的客人一起使用,而无需在家庭租户中调用自己的我。
  • Shawn Tabrizi 回复说,要获得用户的会员资格,您需要拨打GetUsersMemberships。 Microsoft Graph 也提供这些 REST,请检查 List memberOfgetMemberGroups
【解决方案2】:

让我们来看看吧!

我有一个租户:shawntest.onmicrosoft.com

我使用 Azure 门户在此租户中创建了一个新的访客用户:

我点击了“+新来宾用户”按钮,并创建了您可以在上面看到的来宾 Gmail 帐户。我还将此用户添加到了几个组中,也在门户中:

让我们让这个用户登录。

首先,在这些情况下,指定要让用户登录的租户很重要。您可能不应该对这些类型的帐户使用common 端点,因为它们可能与多个租户相关联,并且然后您将其留给 AAD 为您做出最终决定。相反,使用特定的租户 id 指定特定的身份验证上下文:

https://login.microsoftonline.com/shawntest.onmicrosoft.com

现在使用您首选的用户登录流程获取令牌。我正在使用 Native Client 流程,可以使用 just 13 lines of PowerShell 轻松模拟。

获得令牌后,我会调用/me 端点以显示我正在与外部用户合作的证据:

GET https://graph.windows.net/me?api-version=1.6

{
    "odata.metadata": "https://graph.windows.net/myorganization/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element",
    "odata.type": "Microsoft.DirectoryServices.User",
    "objectType": "User",
    ...
    "displayName": "Shawn Tabrizi",
    ...
    "userPrincipalName": "xxxxxx_gmail.com#EXT#@shawntest.onmicrosoft.com",
    "userType": "Guest"
}

我觉得不错。现在让我们使用memberOf 查询来获取用户所属的组。请注意,您可以立即执行此查询,它不依赖于上次查询的任何数据。

GET https://graph.windows.net/me/memberOf?api-version=1.6

{
    "odata.metadata": "https://graph.windows.net/myorganization/$metadata#directoryObjects",
    "value": [{
        "odata.type": "Microsoft.DirectoryServices.Group",
        "objectType": "Group",
        ...
        "displayName": "TestGroup",
        ...
        "securityEnabled": true
    }, {
        "odata.type": "Microsoft.DirectoryServices.Group",
        "objectType": "Group",
        ...
        "displayName": "MyTestGroup",
        ...
        "securityEnabled": true
    }]
}

这就是所有人!

【讨论】:

  • 对不起@Shawn Tabrizi,但我无法让 Powershell 工作它抱怨找不到接受参数“代码”的位置参数。可能在 $authorzationUrl = ("{0}/{1}/oauth2/authorize?response_type=code&client_id={2}&redirect_uri={3}&resource={4}&prompt=consent" 我是否错过了 PowerShell 中的其他模块.
  • 我确实找到了一个示例项目来对此进行测试github.com/microsoftgraph/aspnet-snippets-sample 测试了您关于更改权限 = "login.microsoftonline.com/common/v2.0" 到权限 = "login.microsoftonline.com/<Ourdomain>/v2.0" 的理论仍然用户实际上并没有询问我们的租户除了 /me/ 以外的任何东西。用户从我们的 Azure AD 获得来宾帐户的正确 UPN。但是不再支持 Live.com Id!?
  • 组查询仍然需要管理员的批准,即使我们的管理员已在我们的 Azure AD 中批准,用户也会在其租户中获得管理员批准的查询。他们的管理员在我们的 Azure AD 期间将没有管理员。这是个大问题。我想在我们的 Azure AD 中获得一个来宾用户 memberOf。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多