代码之家  ›  专栏  ›  技术社区  ›  CrazyCoder

在c中从Azure获取keyVault的秘密#

  •  1
  • CrazyCoder  · 技术社区  · 6 年前

    我有下面的代码,它从KeyVault中检索秘密。

    var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
    var sec = await kv.GetSecretAsync(ConfigurationManager.AppSettings["SomeURI"]);
    secretValue = sec.Value ;
    

    GetToken方法:

    async Task<string> GetToken(string authority, string resource, string scope)
    {
        var authContext = new AuthenticationContext(authority);
        ClientCredential clientCred = new ClientCredential(ConfigurationManager.AppSettings["ClientId"],ConfigurationManager.AppSettings["ClientSecret"]);
        AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);    
        if (result == null)
            throw new InvalidOperationException("Failed to obtain the token");    
        return result.AccessToken;
    }
    

    ClientId ClientSecret 从Appconfig。

    如有任何回应,我们将不胜感激!

    我的是用c语言开发的windows服务#

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tom Sun    6 年前

    有没有一种方法可以从配置文件中删除并从其他任何地方获取。或者我的问题有没有什么好的解决办法。

    根据我的理解,你可以将相关信息存储到数据库中。你可以用 windows Authentication

    使用托管标识的另一种方法是通过 Microsoft.Azure.Services.AppAuthentication .

    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(
    azureServiceTokenProvider.KeyVaultTokenCallback));
    

    这样,您就不需要存储相关信息,但在运行服务之前,您需要先使用azure cli登录到azure。这个 AzureServiceTokenProvider 类在内存中缓存令牌。有关更多详细信息,请参阅 authenticate to custom services .