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
- 新增新建secrets01.json,写入以下代码:
{ "RabbitMQConnectStr": "amqp://guest:guest@192.168.11.12:5672" }
- 新增新建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: ":"
- 新建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"]); }
- 测试调用:
http://localhost:5001/api/Secrets/
从IConfiguration获取Secrets
-
新增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(); })
-
RabbitBindingController中写入以下代码:
//从IConfiguration获取密钥 [HttpGet("get01")] public async Task<ActionResult> Get01Async() { return Ok(_configuration["RabbitMQConnectStr"]); }
-
启动测试
- 启动FrontEnd
dapr run --dapr-http-port 3501 --app-port 5001 --app-id frontend dotnet .\FrontEnd\bin\Debug\net6.0\FrontEnd.dll
- 启动FrontEnd
-
测试调用:
http://localhost:5001/api/Secrets/get01/
组件引用Secrets
-
修改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
-
启动测试
- 启动FrontEnd
dapr run --dapr-http-port 3501 --app-port 5001 --app-id frontend dotnet .\FrontEnd\bin\Debug\net6.0\FrontEnd.dll
- 启动FrontEnd
-
打开RabbitMQ Management,找到queue-for-input-binding,发布一条消息
-
查看控制台可以看到控制台已经打印出上一步发送的消息
权限控制
- 修改dapr中config.yaml的内容:
或者secrets: scopes: - storeName: secrets01 defaultAccess: deny
- storeName: secrets01 defaultAccess: deny allowedSecrets: ["RabbitMQConnectStr"] # 开放密钥
- 启动测试
- 启动FrontEnd
dapr run --dapr-http-port 3501 --app-port 5001 --app-id frontend dotnet .\FrontEnd\bin\Debug\net6.0\FrontEnd.dll
- 启动FrontEnd
- 测试调用可以看到返回500:
http://localhost:5001/api/Secrets