如何使用C#获取Azure服务主体的承载令牌

时间:2019-01-09 15:59:10

标签: .net azure azure-resource-manager bearer-token service-principal

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

考虑到我有基本ID以及机密和租户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进行点网或剩余呼叫

2 个答案:

答案 0 :(得分:0)

当前最好的方法是使用Microsoft.Azure.Services.AppAuthentication软件包(因为它支持Managed Service Identities)以及Service Prinicpal。

例如,参见Service-to-service authentication to Azure Key Vault using .NET 。对于其他服务,您可以按照相同的过程进行操作,并根据需要从https://management.azure.com/更改请求的资源。

答案 1 :(得分:0)

我最终得到了以下代码:

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