如何使用REST API登录Azure门户

时间:2018-11-12 23:51:33

标签: azure azure-active-directory azure-resource-manager

我计划实现一个C#应用程序,该应用程序将使用REST API(对Azure Resource Manager的API调用)创建Azure资源。调用REST API时,您必须通过传递身份验证标头“ Authorization:Bearer yJ0eXAiOiJKV ...”进行身份验证。

如何获得此不记名令牌?在线查看我发现的所有Web应用程序,就可以使用它的application_id。但是,我没有任何应用程序,也不想创建一个。

我可以复制通过Fiddler拦截的呼叫,但是我认为这不是“推荐”的方式。

有人遇到这个问题并有解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果您公正想要获取不记名令牌。我建议您可以在Azure API文档中登录您的帐户。登录后,我们可以获取承载令牌。

enter image description here

enter image description here

如果要使用代码获取访问令牌来访问或修改资源,则需要为Azure AD应用程序创建标识。此身份称为服务主体。然后,我们可以将所需的权限分配给服务主体。

如何注册Azure AD应用程序并为该应用程序分配角色,请参阅此document

以下是演示代码,如何使用applicationId和sercet键获取访问令牌

public static async Task<string> GetAccessToken(string tenantId, string clientId, string clientSecretKey)
    {

        var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
        ClientCredential clientCredential = new ClientCredential(clientId, clientSecretKey);
        var tokenResponse = await context.AcquireTokenAsync("https://management.azure.com/", clientCredential);
        var accessToken = tokenResponse.AccessToken;
        return accessToken;
    }

答案 1 :(得分:1)

简短答案:如果您要开发要使用Azure REST API的C#应用​​程序,则为了获取承载令牌进行身份验证,您确实需要进行Azure AD应用程序注册(没有办法解决,因为您必须使用任何受支持的OAuth 2.0授权流进行身份验证)。


不过,有几种方法可以使您更方便:

  • 使用CLI为RBAC创建服务主体

    在Azure门户中,通过单击突出显示的图标来打开CLI。 enter image description here

    现在运行下面提到的命令

    az ad sp create-for-rbac -n "MyTestSPForAzureRESTAPIs"
    

    这可以在一个命令中为您完成多项操作,并且为测试REST API提供了一种很好的入门方法。

    创建的服务主体将作为“贡献者”添加到您的Azure订阅中。您始终可以转到“订阅”>“订阅”>“访问控制(IAM)”,然后根据需要进行更改。

    您将获得一个应用程序ID以及密码/客户端密码,然后可以在C#代码中使用它来获取承载令牌。

    样本输出 enter image description here

    注意:由于此方法为您提供了一个客户机密,因此您应该仅在服务器端应用程序(例如Web API或Web App或Daemon服务)中使用此密码。在生产场景中,请勿使用基于桌面的应用程序(例如控制台应用程序或WPF应用程序)或SPA中的客户端机密。

    之所以这样说,是因为基于桌面的应用程序或SPA的安全性不足以处理客户端机密,因此建议为其使用其他不同的身份验证流程。如果您碰巧遇到这种情况,请查看Azure AD应用程序中的委派权限,您可以在其中提示最终用户输入凭据。只需评论一下答案,我就可以针对这些问题添加更具体的指导。

  • 在应用服务或Azure功能的情况下使用托管身份

    如果您打算使用App Service或作为Azure函数托管您提到的C#应用​​程序,则可以使用MSI。即使在这种情况下,也将在Azure AD中创建一个应用程序,但是您不需要这样做或管理密钥(定期更改密钥等)。这是一个不错的选择,如果适合您的情况,强烈建议使用。

    在此处阅读更多详细信息: How to use managed identities for App Service and Azure Functions