C#接入vault方法

在C#中接入Vault的方法有多种。以下是其中两种常用的方式:

  1. 使用HashiCorp Vault .NET客户端库(VaultSharp)进行接入:

    using System;
    using VaultSharp;
    using VaultSharp.Core;
     
    class Program
    {
        static void Main(string[] args)
        {
            // 创建VaultClient对象并配置连接信息
            var vaultConfig = new VaultConfigurationBuilder()
                .WithAddress("http://localhost:8200") // Vault服务器地址
                .Build();
            
            using (var client = new VaultClient(new HttpClient(), vaultConfig))
            {
                try
                {
                    // 登录到Vault
                    var loginResponse = client.Auth().LoginAsync(new UserPassAuthenticationInfo
                    {
                        UserName = "your-username",
                        Password = "your-password"
                    }).Result;
                
                    if (!loginResponse.IsSuccessful())
                    {
                        Console.WriteLine($"Failed to authenticate with Vault: {loginResponse.ErrorMessage}");
                        return;
                    }
                
                    // 获取访问令牌
                    string token = loginResponse.Data["auth"]["client_token"];
                
                    // 设置访问令牌为默认身份验证标头
                    client.SetDefaultToken(token);
                
                    // 调用Vault API进行操作
                    var secretResponse = client.Secrets.KV.ReadSecretAsync("secret/myapp").Result;
                
                    if (!secretResponse.IsSuccessful())
                    {
                        Console.WriteLine($"Failed to read secret from Vault: {secretResponse.ErrorMessage}");
                        return;
                    }
                
                    // 处理返回结果
                    foreach (var kv in secretResponse.Data["data"])
                    {
                        Console.WriteLine($"Key: {kv.Key}, Value: {kv.Value}");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"An error occurred while interacting with Vault: {ex.Message}");
                }
            }
        }
    }

     

    1. 直接通过HTTP发送REST请求来与Vault交互:

      using System;
      using System.Net.Http;
      using Newtonsoft.Json;
       
      class Program
      {
          static async Task Main(string[] args)
          {
              const string url = "http://localhost:8200"; // Vault服务器地址
          
              // 构造API路由和参数
              var apiRoute = "/v1/auth/userpass/login";
              var requestBody = JsonConvert.SerializeObject(new { username = "your-username", password = "your-password" });
          
              // 创建HttpClient并添加必要的Header
              using (var httpClient = new HttpClient())
              {
                  httpClient.BaseAddress = new Uri(url);
                  httpClient.DefaultRequestHeaders.Add("X-Vault-Token", "your-access-token");
          
                  // 发送POST请求并等待响应
                  var response = await httpClient.PostAsJsonAsync(apiRoute, requestBody);
          
                  // 确保成功收到响应
                  if (response.StatusCode == System.Net.HttpStatusCode.OK)
                  {
                      // 从响应内容中提取所需信息
                      var content = await response.Content.ReadAsStringAsync();
                      dynamic result = JsonConvert.DeserializeObject<dynamic>(content);
          
                      // 处理返回结果
                      string accessToken = result["auth"]["client_token"].ToString();
                      Console.WriteLine($"Access Token: {accessToken}");
                  }
                  else
                  {
                      Console.WriteLine($"Failed to authenticate with Vault: Status Code - {response.StatusCode}");
                  }
              }
          }
      }

       

posted @ 2024-02-27 15:15  zhaoguanhao  阅读(31)  评论(0编辑  收藏  举报