如何从Azure AD获取用于TokenCredentials的访问令牌?

时间:2019-09-30 07:07:24

标签: c# azure azure-active-directory

我正在尝试连接到我的Azure帐户,为此,我需要创建TokenCredentials对象,该对象需要访问令牌作为参数。但是我在获取该访问令牌时遇到了问题。

我已尝试按照此示例的指导进行操作:https://github.com/Azure-Samples/azure-batch-samples/blob/master/CSharp/AccountManagement/Program.cs

这是我要运行的代码:

public static async Task<ServiceClientCredentials> CreateTokenCredentialsAsync()
{
    var clientId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
    var redirectUri = "https://myredirecturi.com";
    var authorityUri = "https://login.microsoftonline.com/common";
    var resourceUri = "https://management.core.windows.net/";

    var platformPrameters = new PlatformParameters(PromptBehavior.Auto);

    var authContext = new AuthenticationContext(authorityUri);
    AuthenticationResult authResult = await authContext.AcquireTokenAsync(
        resourceUri,
        clientId,
        new Uri(redirectUri),
        platformPrameters);

    var token = authResult.AccessToken;

    ServiceClientCredentials creds = new TokenCredentials(authResult.AccessToken);

    return creds;
}

我收到以下异常:

Invalid resource.
The client has requested access to a resource which is not listed in the requested permissions in the client's application registration.
Client app ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx(<my registered app name>).
Resource value from request: https://management.core.windows.net/.
Resource app ID: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyy. 
List of valid resources from app registration: ...

该如何做才能获得访问令牌?

1 个答案:

答案 0 :(得分:2)

听起来像在Azure AD中注册应用程序时未将Azure Service Management API添加到所需权限中。

首先,在Azure AD中找到您的应用程序注册。 然后转到API权限。 点击添加权限。

然后单击“ Azure服务管理”。

Click Azure Service Management

在“委派权限”下选择user_impersonation,然后单击“添加权限”。

Choose user_impersonation

现在,您应该能够显示登录对话框。 它将要求您同意以您的身份访问ARM API。 如果要避免这些提示,并允许该应用程序以租户中的任何登录用户身份调用ARM API,则可以在“ API权限”选项卡上单击“授予租户名称的管理员同意”(假设您是管理员)。