首页 文章

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

提问于
浏览
1

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

我被一些与Azure身份验证相关的事情以及应用程序如何将自身表示给Azure而被抛弃了 .

有关Azure身份验证的大多数文档都涉及允许用户针对Azure Active Directory进行身份验证的Web应用程序 . 这不是我的情景 . 虽然我的应用程序必须针对Azure AD对用户进行身份验证(因为所有Azure用户都是),但我的用户是管理员,而不是"users" .

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

...但是我也理解管理证书几乎已被弃用并被服务主体取代,从安全角度来看本身更有意义(因为它可以实现更细粒度的基于角色的安全性) - 但缺点是存在很多为了使服务管理员能够使用管理软件,需要跳过手动步骤和环节 - 特别是您需要在Azure门户中预先注册您的应用程序 .

我不喜欢这个,因为它大大增加了我正在写的软件的用户摩擦 . 我希望我的软件的行为类似于Visual Studio Cloud Explorer或Azure PowerShell,因为您不需要预先注册任何内容:1 . 只需在桌面上运行该程序; 2.您将获得使用Azure管理员帐户凭据登录的提示 . 3.我的软件软件会列出您订阅的内容,并允许您执行管理任务 .

到目前为止,我实际上已经做了一些事情 - 我执行以下步骤:

  • 使用 Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContexthttps://login.microsoftonline.com/common 进行身份验证(使用 AcquireTokenAsync 表示要查看的webview) . 我使用 clientId: "1950a258-227b-4e31-a9cf-717495945fc2" 这是Azure PowerShell clientId .

  • 使用步骤1中的令牌枚举用户帐户中的租户和订阅 .

  • 提示用户从步骤2中下载的列表中选择租户,然后选择订阅 .

  • 再次使用相同的 clientIdhttps://login.microsoft.com/{tenantId} (其中从步骤3中检索 {tenantId} )发送新的身份验证请求 .

但是,我不喜欢冒充Azure PowerShell - 微软可以撤销该clientId .

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

1 回答

  • 0

    我不喜欢这个,因为它大大增加了我正在写的软件的用户摩擦力 . 我希望我的软件的行为类似于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 endpoints 而不是您注册应用程序的特定租户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 .

相关问题