2016-11-21 90 views
1

我正在开发一个类似于Visual Studio的云资源管理器的工具,该工具在用户的Azure订阅内执行一组有限的管理和部署任务。用于管理实用工具的Azure身份验证

我被一些与Azure身份验证以及应用程序如何向Azure表示自己的东西抛弃了。

有关使用Azure进行身份验证的大多数文档都涉及允许用户针对Azure Active Directory进行身份验证的Web应用程序。这不是我的场景。虽然我的应用程序必然针对Azure AD验证用户(如同所有Azure用户一样),但我的用户是管理员,而不是“用户”。

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

...但是我也明白,管理证书几乎被弃用,并被服务原则取代,从安全角度来看,它本身更有意义(因为它支持更细化的基于角色的安全性) - 但缺点是有许多手动步骤和环节可以跳过,以便使管理软件能够使用服务主体 - 特别是您需要在Azure Portal中预先注册您的应用程序。

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

到目前为止,我实际上得到的东西做这个 - 我执行以下步骤:

  1. 使用Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext反对https://login.microsoftonline.com/common验证(使用AcquireTokenAsync呈现web视图登录)。我使用的是clientId: "1950a258-227b-4e31-a9cf-717495945fc2",它是Azure PowerShell clientId。
  2. 使用步骤1中的令牌枚举用户帐户中的租户和订阅。
  3. 提示用户选择一个租户,然后从在步骤下载的列表的订阅2.
  4. 发送一条新的认证请求发送到https://login.microsoft.com/{tenantId}(其中{tenantId}从步骤3中检索),再次使用相同的clientId

但是,我不喜欢模拟Azure PowerShell - 微软可以撤销该clientId。

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

回答

0

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

实际上,Visual Studio云资源管理器也在Azure AD上注册应用程序,并使用Service Management REST来管理Azure订阅。当您将帐户添加到云资源管理器时,您可以使用Fiddler来强制请求。

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

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

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

多的细节有关认证服务管理的要求,你可以参考here

相关问题