Problem when I call a GET request with an AZURE token. InvalidAuthenticationTokenAudience

%3CLINGO-SUB%20id%3D%22lingo-sub-2565743%22%20slang%3D%22en-US%22%3EProblem%20when%20I%20call%20a%20GET%20request%20with%20an%20AZURE%20token.%20InvalidAuthenticationTokenAudience%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2565743%22%20slang%3D%22en-US%22%3E%3CP%3EI%20have%20a%20.NET%20desktop%20application%20where%20I%20login%20with%20my%20Microsoft%20account%20(username%20and%20email).%20When%20I%20do%20that%2C%20I%20obtain%20an%20access%20token.%20Then%2C%20I%20want%20to%20display%20in%20the%20CONSOLE%20the%20list%20of%20subscriptions%20I%20have%20activated%20in%20that%20account.%20I%20am%20using%20a%20GET%20REQUEST%2C%20which%20is%20the%20only%20thing%20I%20have%20found%20in%20the%20documentation%20of%20Azure%20SDK%20for%20.NET%20developers.%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-csharp%22%3E%3CCODE%3Eclass%20Program%0A%20%20%20%20%7B%0A%0A%20%20%20%20%20%20%20%20public%20static%20string%20clientId%20%3D%20%22XXXXXXXXXXXXXXXXXXXXXX%22%3B%0A%20%20%20%20%20%20%20%20public%20static%20string%20tenantId%20%3D%20%22XXXXXXXXXXXXXXXXXXXXXX%22%3B%0A%0A%20%20%20%20%20%20%20%20public%20static%20IPublicClientApplication%20PublicClientApp%3B%0A%0A%20%20%20%20%20%20%20%20static%20void%20Main(string%5B%5D%20args)%0A%20%20%20%20%20%20%20%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20GetATokenForGraph().GetAwaiter().GetResult()%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20static%20async%20Task%20GetATokenForGraph()%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20options%20%3D%20new%20PublicClientApplicationOptions()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20options.ClientId%20%3D%20clientId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20options.AzureCloudInstance%20%3D%20AzureCloudInstance.AzurePublic%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20options.TenantId%20%3D%20tenantId%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20PublicClientApp%20%3D%20PublicClientApplicationBuilder.CreateWithApplicationOptions(options)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.WithRedirectUri(%22https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.Build()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20_scopes%20%3D%20new%20string%5B%5D%20%7B%20%24%22api%3A%2F%2F%7BclientId%7D%2Faccess_as_user%22%20%7D.AsEnumerable()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20authResult%20%3D%20await%20PublicClientApp.AcquireTokenInteractive(_scopes)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.ExecuteAsync()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine(%22Username%3A%20%22%20%2B%20authResult.Account.Username)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine(%22Environment%3A%20%22%20%2B%20authResult.Account.Environment)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine(%22Scope%3A%20%22%20%2B%20authResult.Scopes.FirstOrDefault())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20httpClient%20%3D%20new%20HttpClient()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20httpClient.DefaultRequestHeaders.Authorization%20%3D%20AuthenticationHeaderValue.Parse(authResult.CreateAuthorizationHeader())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20string%20environmentsUri%20%3D%20%22https%3A%2F%2Fmanagement.azure.com%2Fsubscriptions%3Fapi-version%3D2020-01-01%22%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20response%20%3D%20httpClient.GetAsync(environmentsUri).Result%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20content%20%3D%20response.Content.ReadAsStringAsync().Result%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine(%22%5CnContent%20HTTP%20request%3A%5Cn%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine(content)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3EHowever%2C%20when%20I%20execute%20the%20code%20and%20I%20print%20the%20content%2C%20I%20get%20this%20error%3A%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-bash%22%3E%3CCODE%3E%7B%22error%22%3A%7B%22code%22%3A%22InvalidAuthenticationTokenAudience%22%2C%22message%22%3A%22The%20access%20token%20has%20been%20obtained%20for%20wrong%20audience%20or%20resource%20'XXXXXXXXXXXXXXXXXXXXXXXXXXX'.%20It%20should%20exactly%20match%20with%20one%20of%20the%20allowed%20audiences%20'https%3A%2F%2Fmanagement.core.windows.net%2F'%2C'https%3A%2F%2Fmanagement.core.windows.net'%2C'https%3A%2F%2Fmanagement.azure.com%2F'%2C'https%3A%2F%2Fmanagement.azure.com'.%22%7D%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3EXXXXXXXXXXXXXXXXXX%20is%20my%20clientID.%26nbsp%3B%3C%2FP%3E%3CP%3EI%20did%20all%20the%20steps%20to%20register%20my%20application%20as%20in%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fes-es%2Fazure%2Factive-directory%2Fdevelop%2Fscenario-protected-web-api-app-registration%22%20target%3D%22_self%22%20rel%3D%22noopener%20noreferrer%22%3Ehttps%3A%2F%2Fdocs.microsoft.com%2Fes-es%2Fazure%2Factive-directory%2Fdevelop%2Fscenario-protected-web-api-app-registration%3C%2FA%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E
Occasional Visitor

I have a .NET desktop application where I login with my Microsoft account (username and email). When I do that, I obtain an access token. Then, I want to display in the CONSOLE the list of subscriptions I have activated in that account. I am using a GET REQUEST, which is the only thing I have found in the documentation of Azure SDK for .NET developers.

class Program
    {

        public static string clientId = "XXXXXXXXXXXXXXXXXXXXXX";
        public static string tenantId = "XXXXXXXXXXXXXXXXXXXXXX";

        public static IPublicClientApplication PublicClientApp;

        static void Main(string[] args)
        {

            GetATokenForGraph().GetAwaiter().GetResult();

        }

        static async Task GetATokenForGraph()
        {
            var options = new PublicClientApplicationOptions();
            options.ClientId = clientId;
            options.AzureCloudInstance = AzureCloudInstance.AzurePublic;
            options.TenantId = tenantId;

            PublicClientApp = PublicClientApplicationBuilder.CreateWithApplicationOptions(options)
                    .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                    .Build();

            var _scopes = new string[] { $"api://{clientId}/access_as_user" }.AsEnumerable();
            var authResult = await PublicClientApp.AcquireTokenInteractive(_scopes)
                                        .ExecuteAsync();

            Console.WriteLine("Username: " + authResult.Account.Username);
            Console.WriteLine("Environment: " + authResult.Account.Environment);
            Console.WriteLine("Scope: " + authResult.Scopes.FirstOrDefault());
            var httpClient = new HttpClient();

            httpClient.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse(authResult.CreateAuthorizationHeader());
            
            const string environmentsUri = "https://management.azure.com/subscriptions?api-version=2020-01-01";

            var response = httpClient.GetAsync(environmentsUri).Result;

            var content = response.Content.ReadAsStringAsync().Result;
            Console.WriteLine("\nContent HTTP request:\n");
            Console.WriteLine(content);
        }

    }

However, when I execute the code and I print the content, I get this error:

{"error":{"code":"InvalidAuthenticationTokenAudience","message":"The access token has been obtained for wrong audience or resource 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'. It should exactly match with one of the allowed audiences 'https://management.core.windows.net/','https://management.core.windows.net','https://management.azure.com/','https://management.azure.com'."}}

XXXXXXXXXXXXXXXXXX is my clientID. 

I did all the steps to register my application as in https://docs.microsoft.com/es-es/azure/active-directory/develop/scenario-protected-web-api-app-regis...

 

0 Replies