Как проверить подлинность интерактивного API ресурса Azure с помощью Microsoft.Identity.Client.PublicClientApplication C # - PullRequest
0 голосов
/ 17 октября 2019

У меня есть приложение, созданное Windows Template Studio из VS. У меня работает аутентификация, и я могу успешно получить токен, используя те же учетные данные, которые я использую для портала Azure (Interactive).

using Microsoft.Identity.Client
...

private IPublicClientApplication _client;

_client = PublicClientApplicationBuilder.Create(_clientId)
                  .WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
                  .WithRedirectUri($"msal{_clientId}://auth")
                  .Build();

var accounts = await _client.GetAccountsAsync();  

_authenticationResult = await _client.AcquireTokenInteractive(_scopes)                                                     
                                     .WithAccount(accounts.FirstOrDefault())
                                     .ExecuteAsync();

Как использовать токен с библиотеками API Azure, такими как:

  • Microsoft.Azure.Management.ResourceManager.Fluent

  • Microsoft.Azure.Services.AppAuthentication

1 Ответ

1 голос
/ 17 октября 2019

Согласно моему тесту, мы можем использовать токен доступа для управления ресурсами Azure с помощью Microsoft.Azure.Management.ResourceManager.Fluent SDk. Подробнее см. Использование токена аутентификации в Azure SDK Fluent . Подробные шаги приведены ниже.

  1. Настройте разрешения для используемых приложений Azure AD. enter image description here enter image description here

  2. Код

var client = PublicClientApplicationBuilder.Create(clientId)
                .WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
                .WithRedirectUri($"msal{clientId}://auth")
                .Build();

            var accounts = client.GetAccountsAsync().Result;
            string[] scopes = { "https://management.azure.com/user_impersonation" };
            var result = client.AcquireTokenInteractive(scopes)
                                      .WithAccount(accounts.FirstOrDefault())
                                      .ExecuteAsync().Result;

            string subscritionID = ""; // the subciption Id
            string tenantId= "";// the tenata contains the subscription you use
            TokenCredentials tokenCredentials = new TokenCredentials(result.AccessToken);
            var azureCredentials = new AzureCredentials(tokenCredentials, tokenCredentials, tenantId, AzureEnvironment.AzureGlobalCloud);
            var restClient = RestClient
            .Configure()
            .WithEnvironment(AzureEnvironment.AzureGlobalCloud)
            .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
            .WithCredentials(azureCredentials)
            .Build();
            var azure = Azure
                .Authenticate(restClient, tenantId)
                .WithSubscription(subscritionID);
            var sp = azure.ResourceGroups.List();
            foreach (var group in sp) {

                Console.WriteLine("group name :"+ group.Name);
            }

enter image description here

Кроме того, что касается sdk Microsoft.Azure.Services.AppAuthentication , он также используется для включения службы для проверки подлинности служб Azure. Другими словами, это еще один способ получить токен. Но он поддерживает аутентификацию только с Azure MSI .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...