Dapr专题之08Secrets

本文详细介绍了Dapr中的Secrets管理,包括其优势、如何通过DaprClient和IConfiguration获取Secrets,以及如何在组件中引用和进行权限控制。示例代码展示了从本地文件系统获取和使用Secrets的流程,并且提到了权限控制配置以保护敏感信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dapr Secrets



提示:以下是本篇文章正文内容,下面案例可供参考

Secrets简介以及优势

Secrets就是密钥信息

dapr中的绑Secrets能给我们带来如下好处:

  • 统一保存密钥
  • 减少SDK引用
  • 移植性高
  • 提供了权限控制
    在这里插入图片描述

调用终结点

http://localhost:<dapr-port>/v1.0/secrets/<store-name>/<name>?<metadata>
  • <dapr-port>:Dapr正在侦听的HTTP端口
    
  • <store-name> 指定 Dapr 机密存储的名称。
    
  • <name> 指定要检索的机密的名称。
    
  • <metadata> 提供机密的其他信息。 此字段是可选的,每个机密存储的元数据属性不同。 有关元数据属性详细信息,请参阅 https://docs.dapr.io/reference/api/secrets_api/
    

通过DaprClient获取Secrets

  1. 新增新建secrets01.json,写入以下代码:
    {
     	"RabbitMQConnectStr": "amqp://guest:guest@192.168.11.12:5672"
    }
    
  2. 新增新建secrets01.yaml,写入以下代码:
     apiVersion: dapr.io/v1alpha1
     kind: Component
     metadata:
       name: secrets01
     spec:
       type: secretstores.local.file
       version: v1
       metadata:
       - name: secretsFile
         value: C:\Users\DCG\.dapr\components\secrets01.json # 上面json文件的路径
       - name: nestedSeparator
         value: ":"
    
    
  3. 新建SecretsController,写入以下代码:
      private readonly ILogger<SecretsController> _logger;
      private readonly DaprClient _daprClient;
      private readonly IConfiguration _configuration;
      public SecretsController(ILogger<SecretsController> logger, DaprClient daprClient, IConfiguration configuration)
      {
          _logger = logger;
          _daprClient = daprClient;
          _configuration = configuration;
      }
     	//daprClient获取密钥
      [HttpGet]
      public async Task<ActionResult> GetAsync()
      {
          Dictionary<string, string> secrets = await _daprClient.GetSecretAsync("secrets01", "RabbitMQConnectStr");
          return Ok(secrets["RabbitMQConnectStr"]);
      }
    
  4. 测试调用:
    http://localhost:5001/api/Secrets/在这里插入图片描述

从IConfiguration获取Secrets

  1. 新增Nuget包 Dapr.Extensions.Configuration,在builder.WebHost下添加如下代码

     .ConfigureAppConfiguration(config =>
     {
         var daprClient = new DaprClientBuilder().Build();
         var secretDescriptors = new List<DaprSecretDescriptor> { new DaprSecretDescriptor("RabbitMQConnectStr") };
         config.AddDaprSecretStore("secrets01", secretDescriptors, daprClient);
     })
     .ConfigureAppConfiguration((ht, co) =>
     {
         ht.Configuration = co.Build();
     })
    
  2. RabbitBindingController中写入以下代码:

    //从IConfiguration获取密钥
     [HttpGet("get01")]
     public async Task<ActionResult> Get01Async()
     {
         return Ok(_configuration["RabbitMQConnectStr"]);
     }
    
  3. 启动测试

    • 启动FrontEnd
        dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .\FrontEnd\bin\Debug\net6.0\FrontEnd.dll
      
  4. 测试调用:
    http://localhost:5001/api/Secrets/get01/
    在这里插入图片描述

组件引用Secrets

  1. 修改rabbitmq-input-binding.yam内容如下

     apiVersion: dapr.io/v1alpha1
     kind: Component
     metadata:
       name: api/RabbitBinding
     spec:
       type: bindings.rabbitmq
       version: v1
       metadata:
       - name: queueName
         value: queue-for-input-binding
       - name: host
         secretKeyRef:
           name: RabbitMQConnectStr
           key: RabbitMQConnectStr
     auth:
       secretStore: secrets01
    
    
  2. 启动测试

    • 启动FrontEnd
        dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .\FrontEnd\bin\Debug\net6.0\FrontEnd.dll
      
  3. 打开RabbitMQ Management,找到queue-for-input-binding,发布一条消息
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/e3aa5fc2173948978b1f74483255a8c9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVG9t5piv5Y-q5aW954yr,si

  4. 查看控制台可以看到控制台已经打印出上一步发送的消息
    在这里插入图片描述

权限控制

  1. 修改dapr中config.yaml的内容:
     secrets:
         scopes:
          - storeName: secrets01
            defaultAccess: deny
    
    或者
    - storeName: secrets01
         defaultAccess: deny
         allowedSecrets: ["RabbitMQConnectStr"]  # 开放密钥
    
  2. 启动测试
    • 启动FrontEnd
        dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .\FrontEnd\bin\Debug\net6.0\FrontEnd.dll
      
  3. 测试调用可以看到返回500:
    http://localhost:5001/api/Secrets
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/ef8611bbbf6e494e878aaf1a0e615382.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1

总结

以上就是这次要给大家分享的内容,本文介绍了Dapr中关于Secrets的相关内容,下次将给大家介绍Dapr中的本地调试,分布式追踪相关内容,欢迎各位朋友点赞收藏,同时希望本文能够给大家带来一丝帮助与启发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值