Как получить токен на предъявителя для участника службы Azure с C # - PullRequest
0 голосов
/ 09 января 2019

Мне нужно получить токен доступа на предъявителя для субъекта обслуживания. Я хочу использовать его в приложении C #.

Учитывая, что у меня есть основной идентификатор, секретный идентификатор и идентификатор арендатора, как я могу его получить?

EDIT: чтобы быть более конкретным: У меня есть принципал обслуживания с client_id и client_secret. Я могу получить токен на предъявителя с помощью azure cli, используя следующие команды

az login --service-principal -u client_id --tenant my_tenant_domain -p client_secret
az account set --subscription my_subscription_id
az account get-access-token

Я хотел бы получить тот же токен без использования интерфейса командной строки, который использует Azure SDK для точечной сети или вызова покоя

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Я получил следующий код:

var adSettings = new ActiveDirectoryServiceSettings
{
    AuthenticationEndpoint = new Uri(AzureEnvironment.AzureGlobalCloud.AuthenticationEndpoint),
    TokenAudience = new Uri(AzureEnvironment.AzureGlobalCloud.ManagementEndpoint),
    ValidateAuthority = true
};

await ApplicationTokenProvider.LoginSilentAsync(
                TenantId.Value,
                ServicePrincipalId,
                ServicePrincipalSecret,
                    adSettings,
                    TokenCache.DefaultShared);

var token = TokenCache.DefaultShared.ReadItems()
    .Where(t => t.ClientId == ServicePrincipalId)
    .OrderByDescending(t => t.ExpiresOn)
    .First();
0 голосов
/ 09 января 2019

Текущий и лучший способ - использовать пакет Microsoft.Azure.Services.AppAuthentication , поскольку он поддерживает Идентификаторы управляемых услуг , а также Service Prinicpals.

См., Например, Аутентификация между сервисами в хранилище ключей Azure с использованием .NET , Для других служб вы можете следовать тому же процессу, изменяя запрашиваемый ресурс с https://management.azure.com/, в зависимости от ситуации.

...