如何使用 /common 端点上的 user_impersonation 范围生成的令牌获取所有 Azure AD 帐户列表

Posted

技术标签:

【中文标题】如何使用 /common 端点上的 user_impersonation 范围生成的令牌获取所有 Azure AD 帐户列表【英文标题】:How to get all Azure AD account list using token generated by user_impersonation scope on /common endpoint 【发布时间】:2020-05-02 05:08:24 【问题描述】:

由于 Azure AD 身份验证文档定义了使用 /common 端点获取令牌的方法,如下所示。

https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow

我能够获取 access_token(使用 /common 端点),但现在我正在寻找 API 或获取租户/帐户明智令牌以访问各个租户的订阅的方法

我看到微软正在为 Azure Rest API 测试做这件事。您可以点击“试用”按钮,登录后您将拥有您所属的所有 Azure AD 帐户和令牌租户(您可以在浏览器控制台中查看 /accesstoken 端点)

https://docs.microsoft.com/en-us/rest/api/resources/subscriptions/list#code-try-0

我怎样才能实现与下面的截图相同。

注意:我没有用户租户列表,通过它我可以明智地获取租户 访问令牌

【问题讨论】:

【参考方案1】:

有一个 REST API 可以获取用户所属的租户 (Azure AD) 列表。您可以在此处找到有关此 API 的详细信息:https://docs.microsoft.com/en-us/rest/api/resources/tenants/list。

【讨论】:

感谢您的回复,我知道这一点,但我正在寻找的是生成租户明智的令牌以访问各个租户的订阅。注意:整个过程需要通过 AD 登录流程使用login.microsoftonline.com/common/oauth2/authorize 端点进行初始化。我面临的主要问题与用户使用login.microsoftonline.com/common/oauth2/authorize 端点登录后获取租户明智令牌有关。 您可以在此 URL docs.microsoft.com/en-us/rest/api/resources/subscriptions/… 上查看 Microsoft 如何为其自己的门户(在浏览器控制台中查看)执行此操作。他们在用户登录后调用此端点,这将返回给他们一个租户明智的令牌,我想实现相同的token.docs.microsoft.com/accesstokens【参考方案2】:

您可以在获取访问令牌时通过传递特定租户 ID 来获取租户明智的订阅列表。

var accessToken =
                await tokenAcquisition.GetAccessTokenForUserAsync(new[]  $"ArmApiOperationService.ArmResourceuser_impersonation" , tenantid);

但是当从“https://token.docs.microsoft.com/accesstokens”请求时,ms doc 使用了另一种方法“.TokenAuthCookies”cookie 标头。当我们使用 open id 签名时,我们已经生成了 tokencookie。你已经找到方法了吗?

【讨论】:

@PradipB 我在此处github.com/Azure-Samples/… 上提出了关于官方 azure 示例 GitHub 存储库的问题。如果您找到任何获取“.TokenAuthCookies”cookie 的解决方案,请在此处提及

以上是关于如何使用 /common 端点上的 user_impersonation 范围生成的令牌获取所有 Azure AD 帐户列表的主要内容,如果未能解决你的问题,请参考以下文章

如何解决类中分配端点上的错误请求?

AXIOS 上的 CORS 错误发布到 Pardot 端点

是否可以在同一端口上的 HTTP 中创建另一个端点?

我网站上的“成为客户”按钮要求 POST 客户端点是公开的。我不想公开。我该如何解决这个问题?

如何使用 CSRF 令牌测试 Laravel / Sanctum 端点

如何将 django 端点限制为本地网络?