如何通过 Graph API 将用户添加到租户?

Posted

技术标签:

【中文标题】如何通过 Graph API 将用户添加到租户?【英文标题】:How do I add users to tenant via the Graph API? 【发布时间】:2016-06-14 18:28:34 【问题描述】:

我已使用合作伙伴中心 REST API 为租户提供订单/订阅。现在我想开始为刚刚创建的租户配置域和用户。我的第一步是获取使用 Graph API https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/users-operations 的用户列表作为期望看到管理员帐户的测试。如果我在请求 URL 中传入经销商帐户的域,它会向我显示经销商用户。但是当我输入我刚刚配置的帐户的域时,我得到Invalid domain name in the request url. 我正在使用经销商 AD 令牌来执行此操作。我很困惑,因为它让我可以选择指定域,但我只能访问自己的域。

我应该在这里使用什么凭据?我尝试使用从配置中为管理员帐户生成的用户/通行证,但在尝试从 Graph API 获取 AD 令牌时得到unauthorized_client

【问题讨论】:

2017 详细信息 - 请求 url 中的域名无效。 如果您在经典 Graph 调用 (graph.windows.net) 中看到此错误,请尝试将您的租户 guid id 切换为您的请求网址中的完整域名。这失败了……graph.windows.net/GuidValue这有效……graph.windows.net/MyTenantName.onmicrosoft.com我也避免使用“common”的任何变体 【参考方案1】:

在这里很难直接解决您的问题,因为它们有点宽泛,我需要有关您正在使用的各种租户、您的应用程序如何配置、您的应用程序拥有的权限等的更具体的详细信息...

但我认为您可以遵循一些原则,这些原则可以帮助您调试问题。

所有 AAD 身份验证都发生在特定租户的上下文中。这意味着,每当您获得资源的访问令牌时,该令牌的范围都仅限于租户的边界。 要在租户上下文中使用客户端应用程序进行身份验证,您必须在尝试访问的租户中注册应用程序(业务线应用程序/单租户),或者您必须使应用程序成为多租户,在这种情况下,您的应用应该能够在任何租户的上下文中运行......如果发生了正确的配置。 您的应用程序尝试运行的每个租户都必须具有在租户中预配的应用程序的服务主体。此服务主体代表您的应用程序在该租户上下文中的身份,并充当存储应用程序在该租户上下文中的权限的位置。最常见的情况是,在该租户的用户同意使用该应用作为登录体验的一部分后,此服务主体会被预配到该租户中。 如果您尝试使用用户上下文(授权代码授予流程)来检索有关租户的详细信息,则必须确保该用户存在于您尝试查询的目录中。例如,用户 U 可以存在于他们的主租户 T1 中。如果您尝试使用该用户帐户查询另一个租户 T2,您将收到描述该用户帐户不存在等的任意数量的错误。您可以通过在 T2 中为 U 创建一个来宾帐户来解决此问题,在这种情况下将有在 T2 中创建的全新用户对象链接到 T1 中的原始用户对象。尽管如此,用户对象应该始终存在于您尝试查询的租户中。 如果您尝试使用 T1 和 T2 中的用户帐户登录应用程序,则需要确保指定要实际获取令牌的租户。默认情况下,如果您使用公共端点,您将获得用户主租户的令牌。但是,为次租户获取令牌是完全有效的,只要您在发出请求时向我们的令牌服务指定。 最后,如果您要对 Graph API 进行特定调用,您用来发出这些请求的客户端应用程序需要对 Graph API 具有正确的权限。每个租户都需要在其租户上下文中单独同意该应用程序,以便为其应用程序提供正确的权限。

牢记这些原则: 您收到的“unauthorized_client”错误似乎是辅助租户中的应用程序配置问题。请确保首先使用辅助租户的用户登录应用程序,并确保该用户具有正确的权限来同意您的应用程序(此处最好是租户管理员)。

对于“请求 url 中的域名无效”的第二个问题,请尝试使用一些提示 here。 具体如下:

通过使用 myOrganization 别名。此别名仅在使用 OAuth 授权码授予类型(三足)身份验证时可用;也就是说,当使用委托的权限范围时。别名不区分大小写。它替换 URL 中的对象 ID 或租户域。当使用别名时,Graph API 从附加到请求的令牌中提供的声明派生租户。以下 URL 显示如何使用此别名处理租户的用户资源集合: https://graph.windows.net/myorganization/users?api-version=1.6.

我希望这能让您走上解决大部分问题的正确道路。

【讨论】:

【参考方案2】:

沙盒帐户和 Azure 存在问题。访问沙盒的 Azure 管理门户并不简单,目前无法正常工作。我必须使用我的 hotmail 帐户创建一个免费的 Azure 帐户,然后将新帐户中的 AD 链接到我的沙盒 AD 以绕过该错误。将新目录添加到新的 Azure 帐户时,选择“使用现有目录”,注销,然后登录要链接到的沙盒帐户。然后从新帐户创建您的应用程序。

在正确设置我的应用程序和新凭据后,我必须按照末尾列出的说明启用预先同意:https://github.com/Microsoft/Partner-Center-Explorer

最后,我必须使用客户 ID 登录到 Graph API,但使用经销商凭据。

【讨论】:

【参考方案3】:

scenarios on the Partner Center SDK website 在“管理客户帐户”部分下包含“管理用户帐户和分配许可证”部分。

这些示例包括创建用户和分配许可证以及控制台测试应用的链接。

顺便说一句,新版本的合作伙伴中心 SDK 刚刚发布 here。它于7月5日发布。虽然我找不到正式的更改历史记录,但我可以看到它包含一些新类,例如 CustomerUser。您可能会发现使用该库比使用 REST API 更容易(取决于您已经完成了多少工作)。

【讨论】:

我已经看到了变化。我为图形 API 拥有的一些用户功能现在可以在合作伙伴中心使用。我没有尝试过,这似乎很奇怪,因为我必须在添加用户之前验证域,并且合作伙伴中心还没有域功能。也许这个限制不在新的变化中。我会知道我是否可以改变它。至于跳过 REST...SDK 只是一个 C# REST 包装器,我在 python 中。

以上是关于如何通过 Graph API 将用户添加到租户?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 REST API 将用户添加到 Apache Ranger

Azure B2C 使用 Graph API 登录

Microsoft Graph 登录审核日志 API:对于某些登录,内部用户显示为访客用户类型

如何通过 Graph API 创建一个 Facebook 事件以具有特定时间和时区,该时间和时区不会因个人用户而改变?

无法通过 Graph API 将提要发布到 Facebook 页面

如何将请求路由到正确的租户 API 网关?