Как получить токен на предъявителя для участника службы 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/
в зависимости от обстоятельств.