C# 在单租户应用程序中向Azure AD或图形查询来宾帐户

C# 在单租户应用程序中向Azure AD或图形查询来宾帐户,c#,function,azure,graph,azure-active-directory,C#,Function,Azure,Graph,Azure Active Directory,我正在寻找支持以下场景的信息 我们邀请来自其他Azure广告的用户作为我们的Azure广告的来宾,将他们放入一个组中用于特定目的,并且需要能够从我们的Azure广告中获取该组的来宾用户成员。当尝试使用Graph时,我们无法连接到我们的Graph,因为来宾帐户总是询问自己的Graph。我们已经在网络上搜索了很长时间,并测试了许多示例应用程序,乍一看,这些应用程序似乎可以支持我们的方案,但到目前为止运气不佳 我们希望注册单租户应用程序的原因之一是为了能够管理我们应用程序的许可部分,并单独管理对我们应

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

我们邀请来自其他Azure广告的用户作为我们的Azure广告的来宾,将他们放入一个组中用于特定目的,并且需要能够从我们的Azure广告中获取该组的来宾用户成员。当尝试使用Graph时,我们无法连接到我们的Graph,因为来宾帐户总是询问自己的Graph。我们已经在网络上搜索了很长时间,并测试了许多示例应用程序,乍一看,这些应用程序似乎可以支持我们的方案,但到目前为止运气不佳

我们希望注册单租户应用程序的原因之一是为了能够管理我们应用程序的许可部分,并单独管理对我们应用程序的访问,而不是要求客户IT参与多租户解决方案的设置和维护过程


我现在已经失去了所有方向,只需要向某个方向推一下如何继续。

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

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

有关此rest的更多详细信息,请参阅下面的链接。如果你对这次休息还有问题,请随时告诉我


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

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

有关此rest的更多详细信息,请参阅下面的链接。如果你对这次休息还有问题,请随时告诉我

让我们来看看吧

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

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

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

那么让我们登录该用户。

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

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

现在使用首选用户登录流获取令牌。我使用的是本机客户端流,可以很容易地用模拟

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

GEThttps://graph.windows.net/me?api-版本=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"
}
{
    "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
    }]
}
我觉得不错。现在,让我们使用
memberOf
查询获取用户所属的组。请注意,您可以立即执行此查询,它不依赖于上一次查询中的任何数据

GEThttps://graph.windows.net/me/memberOf?api-版本=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"
}
{
    "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
    }]
}
这就是所有的人

让我们走过去吧

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

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

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

那么让我们登录该用户。

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

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

现在使用首选用户登录流获取令牌。我使用的是本机客户端流,可以很容易地用模拟

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

GEThttps://graph.windows.net/me?api-版本=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"
}
{
    "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
    }]
}
我觉得不错。现在,让我们使用
memberOf
查询获取用户所属的组。请注意,您可以立即执行此查询,它不依赖于上一次查询中的任何数据

GEThttps://graph.windows.net/me/memberOf?api-版本=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"
}
{
    "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
    }]
}

这就是所有的人

我相信AAD应该支持你的方案,但目前还不清楚你到底在尝试什么,以及你目前失败的地方。如果您可以分享有关当前身份验证方法的更多详细信息,以及您收到的特定错误消息或行为,我相信社区可以帮助您解决问题。Shawn请参阅下面的评论。我相信AAD应该支持您的方案,但目前还不清楚你到底在尝试什么,你在哪里失败。如果您可以分享有关当前身份验证方法的更多详细信息,以及您收到的特定错误消息或行为,我相信社区可以帮助您解决问题。Shawn请参阅下面的评论。在我们的组中查找来宾成员是可行的,但我希望来宾能够在我们的租户中找到他所属的组。找不到对此的支持。在所有组中寻找一个用户有点多。我希望能够在我们的租户中找到应用程序用户memberOf找不到将查询指向我们租户的方法。已登录的用户始终可以看到其家庭租户的成员。Enterprize应用程序将需要用于无需呼叫home tenant中的own me即可工作的客户