用于管理实用程序的 Azure 身份验证

Posted

技术标签:

【中文标题】用于管理实用程序的 Azure 身份验证【英文标题】:Azure authentication for management utility 【发布时间】:2017-04-05 10:27:46 【问题描述】:

我正在开发一种工具,类似于 Visual Studio 的 Cloud Explorer,它在用户的 Azure 订阅中执行一组有限的管理和部署任务。

我对一些与针对 Azure 进行身份验证以及应用程序如何向 Azure 表示自身有关的事情感到困惑。

大多数关于 Azure 身份验证的文档都与 Web 应用程序有关,这些应用程序允许用户针对 Azure Active Directory 进行身份验证。这不是我的情况。虽然我的应用程序必须根据 Azure AD 对用户进行身份验证(就像所有 Azure 用户一样),但我的用户是管理员,而不是“用户”。

我了解以前执行管理任务的软件将被分配一个管理证书,该证书在基于 Web 的 Azure 管理门户中单独注册。我明白这一点。

...但是我也知道管理证书几乎已被弃用并被服务主体取代,从安全角度来看,这本身更有意义(因为它支持更精细的基于角色的安全性) - 但缺点是存在为了使服务主体能够与管理软件一起使用,需要大量手动步骤和障碍 - 特别是您需要在 Azure 门户中预先注册您的应用程序。

我不喜欢这样,因为它大大增加了用户对我正在编写的软件的摩擦。我希望我的软件表现得像 Visual Studio Cloud Explorer 或 Azure PowerShell,因为您不需要预先注册任何东西: 1. 只需在桌面上运行程序; 2. 您将收到使用您的 Azure 管理员帐户凭据登录的提示。 3. 我的软件列出了您订阅的内容并让您执行管理任务。

到目前为止,我实际上已经得到了一些可以做到这一点的东西 - 我执行以下步骤:

    使用Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContexthttps://login.microsoftonline.com/common 进行身份验证(使用AcquireTokenAsync 提供Web 视图以进行登录)。我使用 clientId: "1950a258-227b-4e31-a9cf-717495945fc2",它是 Azure PowerShell clientId。 使用步骤 1 中的令牌枚举用户帐户中的租户和订阅。 系统会提示用户选择租户,然后从步骤 2 中下载的列表中选择订阅。 再次使用相同的clientIdhttps://login.microsoft.com/tenantId 发送新的身份验证请求(其中tenantId 是从第3 步中检索到的)。

但我不喜欢冒充 Azure PowerShell - Microsoft 可以撤销该 clientId。

...但是如何注册可用于在步骤 1 中登录的 clientId(当没有 tenantId 或订阅上下文,因此没有包含服务主体的 Azure AD 时)?

【问题讨论】:

【参考方案1】:

我不喜欢这样,因为它大大增加了用户对我正在编写的软件的摩擦。我希望我的软件表现得像 Visual Studio Cloud Explorer 或 Azure PowerShell,因为您不需要预先注册任何东西: 1. 只需在桌面上运行程序; 2. 您将收到使用您的 Azure 管理员帐户凭据登录的提示。 3. 我的软件列出了您订阅的内容并让您执行管理任务。

实际上,Visual Studio Cloud Explorer 也在 Azure AD 上注册了应用,并使用Service Management REST 来管理 Azure 订阅。当您将帐户添加到 Cloud Explorer 时,您可以使用 Fiddler 捕获请求。

...但是如何注册可用于在步骤 1 中登录的 clientId(当没有tenantId 或订阅上下文,因此没有包含服务主体的 Azure AD 时)?

我们需要开发一个multi-tenant application,让来自不同租户的用户能够使用该应用程序。之后,我们可以使用 Common 端点代替您注册应用程序的特定租户 ID。然后用户使用与 Azure 订阅相关联的帐户登录并获取 Service Management REST 的访问令牌。最后,应用程序可以使用访问令牌管理 Azure 资源。例如,我们可以使用下面的 REST 来列出 Azure Sbuscriptions:

Get:https://management.core.windows.net/subscriptions
Authorization: Bearer token
x-ms-version: 2013-08-01

关于验证服务管理请求的更多细节,您可以参考here。

【讨论】:

以上是关于用于管理实用程序的 Azure 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

用于 Azure 移动服务 (REST) 的 Live Connect 身份验证令牌

基于身份的身份验证不适用于 Azure 存储文件共享

Azure Api 规则不适用于使用具有身份验证基本和身份验证证书的默认助手

无法对 Azure 上的 API 管理执行资源所有者密码 OAuth2 身份验证

具有 Azure AD 身份验证的 Azure 函数 - 允许的令牌受众不适用于 Microsoft Graph

如何使用 Azure API 管理设计微服务架构中的身份验证和授权策略?