在 Dapr 上启用 token 认证

    默认情况下,Dapr 依靠网络边界来限制对其公共 API 的访问。 如果你打算将 Dapr API 暴露在网络边界之外,或者如果您的 deployment 需要额外级别的安全性,那么请考虑开启 Dapr API 的令牌认证。 这将使得 Dapr 要求每个入站 gRPC 和 HTTP API 请求都需要包含认证令牌,然后请求才能放行。

    Dapr 使用 JWT 令牌进行 API 身份验证。

    为了配置 API 身份验证,需要先使用任意 JWT 令牌兼容工具(如) 和 secret 来生成您的令牌。

    在 Dapr 上配置 token 认证

    令牌认证配置在 Kubernetes 和 自托管 Dapr deployments 下稍有不同:

    如果需要更新已配置的令牌,只需将 DAPR_API_TOKEN 环境变量设置为新值,然后重新启动 daprd进程。

    Kubernetes

    在 Kubernetes deployment 里,Dapr 借助 Kubernetes secrets store 保存 JWT 令牌。 配置 Dapr API 认证,需要创建新的 secret:

    1. kubectl create secret generic dapr-api-token --from-literal=token=<token>

    指定 Dapr 使用该密钥来保护其公有 API,需要在你的 Deployment template spec 中添加 annotation:

    1. annotations:
    2. dapr.io/enabled: "true"

    当 Deployment 部署后,Dapr sidecar 注入器会自动创建一个 secret,并将实际值注入到 DAPR_API_TOKEN 环境变量中。

    如果需要更新已配置的令牌,只需将环境变量 DAPR_API_TOKEN设置为新值,然后重新启动 daprd进程。

    Kubernetes

    然后将其 apply 到每个命名空间:

    1. kubectl apply --file token-secret.yaml --namespace <namespace-name>

    为了让 Dapr 开始使用新令牌,需要对你的每个 deployment 进行滚动升级:

      将 JWT 令牌添加到客户端 API 调用

      在 Dapr 中配置令牌认证后,所有客户端调用 Dapr API 的都必须要把 JWT 令牌附加到每个请求:

      如果是 HTTP ,那么 Dapr 将检查在 HTTP 请求头中否存在 参数 :

      gRPC

      当使用 gRPC 协议时,Dapr 将检查入站 gRPC 请求的元数据(metadata)上的 API 令牌 :

      1. dapr-api-token[0].
      1. containers:
      2. - name: mycontainer
      3. image: myregistry/myapp
      4. envFrom:
      5. name: dapr-api-token

      自托管

      在自托管模式下,您可以将令牌设置为应用程序的环境变量 :

      相关链接