使用Azure帐户用户名和密码获取访问令牌

5

我正在尝试收集Azure资源的度量信息。为此,我需要一个访问令牌进行授权。但是要获取访问令牌,我必须提供客户端ID、客户端密钥、订阅ID和租户ID。我想知道是否可以只提供我的Azure帐户的用户名和密码来获取此访问令牌,而不需要提供这么多详细信息。

3个回答

5
基本上您需要参数。Azure的API由Azure AD保护,因此您首先必须对其进行身份验证。如果您想以用户身份进行调用,则仍然需要使用少数可用方式之一进行身份验证。密码授权(如@4c74356b41答案中所示)是一种选择,但并不真正推荐。原因是如果用户的密码已过期或启用了MFA,则无法正常工作。
通常您要做的是请求用户通过Azure AD登录页面(通过重定向或Web视图),然后交换生成的授权代码以获取访问令牌和刷新令牌。然后您可以以用户的身份对API进行调用。
另一种选择是在Azure AD中注册您的应用程序,并为其服务主体授予Azure订阅/资源组/资源中的某些角色。然后它可以使用客户端凭据进行身份验证(仅使用其客户端ID和秘密+您的Azure AD租户ID)。

4

这是可能的,但被认为不安全。并且您仍然需要许多参数:

Name    Description
grant_type  The OAuth 2 grant type: password
resource    The app to consume the token, such as Microsoft Graph, Azure AD Graph or your own Restful service
client_id   The Client Id of a registered application in Azure AD
username    The user account in Azure AD
password    The password of the user account
scope   optional, such as openid to get Id Token

参考资料:
https://blogs.msdn.microsoft.com/wushuai/2016/09/25/resource-owner-password-credentials-grant-in-azure-ad-oauth/

附注:请勿在意沃尔特,他的答案有50%的错误率。


2

这取决于您的需求以及是否需要完全自动化。

如果您想为ServicePrincipal获取令牌,4c74356b41的答案是一个很好的方法。

但是,如果您想要为已在PowerShell会话中进行身份验证的用户(您或另一个AAD用户)获取承载令牌,则可以使用我编写的以下代码轻松完成此操作。

https://gallery.technet.microsoft.com/scriptcenter/Easily-obtain-AccessToken-3ba6e593

基本上,它从令牌缓存中获取当前令牌并将其返回给您。这样,您就不必处理clientId、cliendSecret或证书。当我需要按需调用Azure REST API时,我经常使用它。


有没有一种简单的方法,只使用AAD凭据而不使用login-azurermaccount来进行Azure身份验证? - Jeff Patton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接