我正在开发一个类似于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.我的软件列出了您的订阅内容,并让您执行管理任务。
到目前为止,我实际上得到的东西做这个 - 我执行以下步骤:
- 使用
Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext
反对https://login.microsoftonline.com/common
验证(使用AcquireTokenAsync
呈现web视图登录)。我使用的是clientId: "1950a258-227b-4e31-a9cf-717495945fc2"
,它是Azure PowerShell clientId。 - 使用步骤1中的令牌枚举用户帐户中的租户和订阅。
- 提示用户选择一个租户,然后从在步骤下载的列表的订阅2.
- 发送一条新的认证请求发送到
https://login.microsoft.com/{tenantId}
(其中{tenantId}
从步骤3中检索),再次使用相同的clientId
。
但是,我不喜欢模拟Azure PowerShell - 微软可以撤销该clientId。
...但是,如何注册可用于在步骤1中登录的clientId(当没有tenantId
或订阅上下文,因此没有包含服务主体的Azure AD)?