大使的API密钥认证

问题描述 投票:1回答:1

我正在试图弄清楚如何使用大使在k8s上创建一个简单的API密钥保护代理,但似乎无法在此找到任何文档。

具体来说,我只是想设置它以便它可以接受带有API-KEY头的请求,对它进行身份验证,如果API-KEY对某些客户端有效,则将其传递给我的后端。

authentication kubernetes api-gateway
1个回答
3
投票

我建议你做以下事情:

  1. 创建身份验证应用程序:对于每个受保护的端点,此应用程序将负责验证Api密钥。
  2. 配置Ambassador将请求重定向到此服务:您只需要注释您的身份验证应用程序服务定义。例:
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: auth-app
      annotations:
        getambassador.io/config: |
          ---
          apiVersion: ambassador/v1
          kind:  AuthService
          name:  authentication
          auth_service: "auth-app:8080"
          allowed_request_headers:
          - "API-KEY"
    spec:
      type: ClusterIP
      selector:
        app: auth-app
      ports:
      - port: 8080
        name: auth-app
        targetPort: auth-app
  1. 在auth-app中配置与要验证的应用程序的端点相对应的端点。假设你有一个带有这样的映射的应用程序:
    apiVersion: ambassador/v1
    kind:  Mapping
    name:  myapp-mapping
    prefix: /myapp/
    service: myapp:8000

然后你需要在auth-app中有一个端点“/ myapp /”。您将在那里阅读API-KEY标题。如果密钥有效,则返回HTTP 200(OK)。然后大使将原始信息发送给myapp。如果auth-app返回除HTTP 200之外的任何其他内容,则Ambassador会将该响应返回给客户端。

  1. 绕过所需应用程序中的身份验证。例如,您可能需要一个登录应用程序,负责向客户端提供API密钥。您可以使用bypass_auth绕过这些应用程序的身份验证:映射中为true:
    apiVersion: ambassador/v1
    kind:  Mapping
    name:  login-mapping
    prefix: /login/
    service: login-app:8080
    bypass_auth: true

Check this如果您想了解更多有关大使身份验证的信息

编辑:According to this answer如果你使用标题Authorization: Bearer {base64-API-KEY}这是一个很好的做法。在大使中,默认情况下允许Authorization标头,因此您无需在allowed_request_headers字段中传递它。

© www.soinside.com 2019 - 2024. All rights reserved.