用于管理实用程序的 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.AuthenticationContext
对https://login.microsoftonline.com/common
进行身份验证(使用AcquireTokenAsync
提供Web 视图以进行登录)。我使用 clientId: "1950a258-227b-4e31-a9cf-717495945fc2"
,它是 Azure PowerShell clientId。
使用步骤 1 中的令牌枚举用户帐户中的租户和订阅。
系统会提示用户选择租户,然后从步骤 2 中下载的列表中选择订阅。
再次使用相同的clientId
向https://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 Api 规则不适用于使用具有身份验证基本和身份验证证书的默认助手
无法对 Azure 上的 API 管理执行资源所有者密码 OAuth2 身份验证