操作方式:获取密钥

使用密钥存储构建块安全地获取密钥

现在,你已了解Dapr秘密构建块提供的功能,请了解它如何在你的服务中工作。 本指南演示了如何调用密钥 API,并从配置的密钥存储中检索应用程序代码中的密钥。

Diagram showing secrets management of example service.

注意

如果你还没有,请尝试使用密钥管理快速入门快速了解如何使用密钥 API。

设置密钥存储

在获取应用程序代码中的密钥之前,您必须配置一个密钥存储组件。 此示例配置了一个密钥存储,使用本地 JSON 文件来存储密钥。

警告

在生产级应用程序中,不建议使用本地密钥存储。 查找替代方案以安全地管理您的密钥。

在你的项目目录中,创建一个名为 secrets.json 的文件,包含以下内容:

  1. {
  2. "secret": "Order Processing pass key"
  3. }

创建一个名为 components 的新目录。 进入该目录并创建一个名为 local-secret-store.yaml 的组件文件,内容如下:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: localsecretstore
  5. spec:
  6. type: secretstores.local.file
  7. version: v1
  8. metadata:
  9. - name: secretsFile
  10. value: secrets.json #path to secrets file
  11. - name: nestedSeparator
  12. value: ":"

警告

密钥存储 JSON 的路径是相对于您调用 dapr run 的位置。

了解更多信息:

获取密钥

通过使用secrets API调用Dapr sidecar获取秘密。

  1. curl http://localhost:3601/v1.0/secrets/localsecretstore/secret

查看完整的API参考

从你的代码调用密钥 API

现在您已经设置好了本地密钥存储,可以调用 Dapr 从您的应用程序代码中获取密钥。 下面是利用 Dapr SDK 检索密钥的代码示例。

  1. //dependencies
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Net.Http;
  5. using System.Net.Http.Headers;
  6. using System.Threading.Tasks;
  7. using Dapr.Client;
  8. using Microsoft.AspNetCore.Mvc;
  9. using System.Threading;
  10. using System.Text.Json;
  11. //code
  12. namespace EventService
  13. {
  14. class Program
  15. {
  16. static async Task Main(string[] args)
  17. {
  18. string SECRET_STORE_NAME = "localsecretstore";
  19. using var client = new DaprClientBuilder().Build();
  20. //Using Dapr SDK to get a secret
  21. var secret = await client.GetSecretAsync(SECRET_STORE_NAME, "secret");
  22. Console.WriteLine($"Result: {string.Join(", ", secret)}");
  23. }
  24. }
  25. }
  1. //dependencies
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import io.dapr.client.DaprClient;
  5. import io.dapr.client.DaprClientBuilder;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import java.util.Map;
  10. //code
  11. @SpringBootApplication
  12. public class OrderProcessingServiceApplication {
  13. private static final Logger log = LoggerFactory.getLogger(OrderProcessingServiceApplication.class);
  14. private static final ObjectMapper JSON_SERIALIZER = new ObjectMapper();
  15. private static final String SECRET_STORE_NAME = "localsecretstore";
  16. public static void main(String[] args) throws InterruptedException, JsonProcessingException {
  17. DaprClient client = new DaprClientBuilder().build();
  18. //Using Dapr SDK to get a secret
  19. Map<String, String> secret = client.getSecret(SECRET_STORE_NAME, "secret").block();
  20. log.info("Result: " + JSON_SERIALIZER.writeValueAsString(secret));
  21. }
  22. }
  1. #dependencies
  2. import random
  3. from time import sleep
  4. import requests
  5. import logging
  6. from dapr.clients import DaprClient
  7. from dapr.clients.grpc._state import StateItem
  8. from dapr.clients.grpc._request import TransactionalStateOperation, TransactionOperationType
  9. #code
  10. logging.basicConfig(level = logging.INFO)
  11. DAPR_STORE_NAME = "localsecretstore"
  12. key = 'secret'
  13. with DaprClient() as client:
  14. #Using Dapr SDK to get a secret
  15. secret = client.get_secret(store_name=DAPR_STORE_NAME, key=key)
  16. logging.info('Result: ')
  17. logging.info(secret.secret)
  18. #Using Dapr SDK to get bulk secrets
  19. secret = client.get_bulk_secret(store_name=DAPR_STORE_NAME)
  20. logging.info('Result for bulk secret: ')
  21. logging.info(sorted(secret.secrets.items()))
  1. //dependencies
  2. import (
  3. "context"
  4. "log"
  5. dapr "github.com/dapr/go-sdk/client"
  6. )
  7. //code
  8. func main() {
  9. client, err := dapr.NewClient()
  10. SECRET_STORE_NAME := "localsecretstore"
  11. if err != nil {
  12. panic(err)
  13. }
  14. defer client.Close()
  15. ctx := context.Background()
  16. //Using Dapr SDK to get a secret
  17. secret, err := client.GetSecret(ctx, SECRET_STORE_NAME, "secret", nil)
  18. if secret != nil {
  19. log.Println("Result : ")
  20. log.Println(secret)
  21. }
  22. //Using Dapr SDK to get bulk secrets
  23. secretBulk, err := client.GetBulkSecret(ctx, SECRET_STORE_NAME, nil)
  24. if secret != nil {
  25. log.Println("Result for bulk: ")
  26. log.Println(secretBulk)
  27. }
  28. }
  1. //dependencies
  2. import { DaprClient, HttpMethod, CommunicationProtocolEnum } from '@dapr/dapr';
  3. //code
  4. const daprHost = "127.0.0.1";
  5. async function main() {
  6. const client = new DaprClient({
  7. daprHost,
  8. daprPort: process.env.DAPR_HTTP_PORT,
  9. communicationProtocol: CommunicationProtocolEnum.HTTP,
  10. });
  11. const SECRET_STORE_NAME = "localsecretstore";
  12. //Using Dapr SDK to get a secret
  13. var secret = await client.secret.get(SECRET_STORE_NAME, "secret");
  14. console.log("Result: " + secret);
  15. //Using Dapr SDK to get bulk secrets
  16. secret = await client.secret.getBulk(SECRET_STORE_NAME);
  17. console.log("Result for bulk: " + secret);
  18. }
  19. main();

相关链接