authentication - 大使的 API 密钥身份验证
问题描述
我试图弄清楚如何在 k8s 上使用 Ambassador 创建一个简单的 API 密钥保护代理,但似乎找不到任何文档。
具体来说,我只想设置它,以便它可以接受带有 API-KEY 标头的请求,对其进行身份验证,如果 API-KEY 对某些客户端有效,则将其传递到我的后端。
解决方案
我建议您执行以下操作:
创建一个身份验证应用程序:对于每个受保护的端点,此应用程序将负责验证 Api 密钥。
配置 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
- 在auth-app中配置一个与您要认证的应用程序的端点相对应的端点。假设您有一个具有如下映射的应用程序:
apiVersion: ambassador/v1
kind: Mapping
name: myapp-mapping
prefix: /myapp/
service: myapp:8000
然后你需要在auth-app中有一个端点“ /myapp/ ” 。您将在那里阅读您的API-KEY标头。如果密钥有效,则返回 HTTP 200(OK)。然后,Ambassador 会将原始消息发送到myapp。如果auth-app返回除 HTTP 200 之外的任何其他内容,Ambassador 会将该响应返回给客户端。
- 绕过所需应用程序中的身份验证。例如,您可能需要一个登录应用程序,负责向客户端提供 API 密钥。您可以在映射中使用bypass_auth: true绕过这些应用的身份验证:
apiVersion: ambassador/v1
kind: Mapping
name: login-mapping
prefix: /login/
service: login-app:8080
bypass_auth: true
如果您想了解有关大使身份验证的更多信息,请选中此项
编辑:根据这个答案,如果您使用 as header ,这是一个好习惯Authorization: Bearer {base64-API-KEY}
。在 Ambassador 中,默认情况下允许Authorization标头,因此您无需在allowed_request_headers字段中传递它。
推荐阅读
- docker - 在 Docker 中设置多个服务
- python-2.7 - 在 python 中构建 AWS S4 身份验证
- python - 如何解决错误 ImportError: cannot import name 'AsyncWebsocketConsumer'?
- office365 - 循环遍历 Excel Javascript API 中所有工作表的最佳方法?
- javascript - webpack 别名在 React 类函数中未按预期解析
- mysql - 我想进行 sql 查询以获取具有单独表中属性的不同产品数据
- javascript - 如何使用 javascript 读取 json 数据?
- python-3.x - 我们如何在python中以圆周运动旋转图像
- performance - 是什么决定了程序运行的速度?
- javascript - react-waypoint onEnter/onLeave 没有给出价值