Как получить токен на предъявителя для участника службы Azure с C#

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

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

РЕДАКТИРОВАТЬ: чтобы быть более конкретным: у меня есть руководитель службы с 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 ответа

Решение

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

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();

Текущий и лучший способ - использовать пакет https://www.nuget.org/packages/Microsoft.Azure.Services.AppAuthentication, так как он поддерживает идентификаторы управляемых сервисов, а также сервисные принцессы.

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

Другие вопросы по тегам