4

我需要获取服务主体的不记名访问令牌。我想在 C# 应用程序中使用它。

鉴于我有 principial id 和 secret 以及tenant id,我怎样才能获得它?

编辑:更具体地说:我有服务主体client_idclient_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

我想在不使用 CLI 的情况下获得相同的令牌,即使用 Azure SDK 进行 dot net 或 rest 调用

4

2 回答 2

3

我最终得到以下代码:

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();
于 2019-01-18T15:18:25.437 回答
0

当前最好的方法是使用Microsoft.Azure.Services.AppAuthentication包,因为它支持Managed Service Identities以及 Service Prinicpals。

例如,请参阅使用 .NET 对 Azure Key Vault 的服务到服务身份验证 。对于其他服务,您可以遵循相同的过程,根据需要从 更改请求的资源https://management.azure.com/

于 2019-01-09T16:09:16.337 回答