Authentication 大使API密钥认证
我试图弄清楚如何在k8s上创建一个简单的API密钥保护代理,但似乎找不到任何关于这个的文档Authentication 大使API密钥认证,authentication,kubernetes,api-gateway,Authentication,Kubernetes,Api Gateway,我试图弄清楚如何在k8s上创建一个简单的API密钥保护代理,但似乎找不到任何关于这个的文档 具体地说,我只想对它进行设置,这样它就可以接受带有API-KEY头的请求,对其进行身份验证,如果API-KEY对某个客户端有效,则将其传递到我的后端 我建议您执行以下操作: 创建身份验证应用程序:对于每个受保护的端点,此应用程序将负责验证Api密钥 配置Ambassador以将请求重定向到此服务:您只需注释身份验证应用程序服务定义。例如: 在auth app中配置与要进行身份验证的应用的端点相对应的端点。
具体地说,我只想对它进行设置,这样它就可以接受带有API-KEY头的请求,对其进行身份验证,如果API-KEY对某个客户端有效,则将其传递到我的后端 我建议您执行以下操作:
编辑:如果您使用as头
授权:承载{base64 API KEY}
,这是一个很好的做法。默认情况下,授权头是允许的,因此您不需要在allowed_request_headers字段中传递它。在没有找到简单的方法(这不会涉及)之后,我决定使用这个快速而肮脏的解决方案
您可以使用并且只允许具有匹配的头:值的传入请求
---
apiVersion:getambassador.io/v2
种类:地图
元数据:
名称:受保护映射
名称空间:默认值
规格:
前缀:/protectedpath/
重写:/
标题:
#普尔曼持单人身份验证
#Ambassador将返回404错误,除非在传入请求上按以下方式设置授权标头值。
授权:“持票人”
服务:app:80
测试
#未经身份验证=>404
$curl-sI-X获取https://ambassador/protected-path/
未找到HTTP/1.1 404
日期:2021年3月11日星期四18:30:27 GMT
服务器:特使
内容长度:0
#已验证=>200
$curl-sI-X GET-H'授权:持有人eEVCV1JtUzBSVUFvQmw4eVRVM25BenJa'https://ambassador/protected-path/
HTTP/1.1200ok
内容类型:application/json;字符集=utf-8
变化:起源
日期:2021年3月11日星期四18:23:20 GMT
内容长度:15
x-特使-上游-服务时间:3
服务器:特使
虽然从技术上讲,您可以在这里使用任何头:值
对(例如,x-my-auth-header:header值
),但如果您想要遵循标准,则授权:承载…
方案似乎是最合适的
在这种情况下,是否对令牌进行base64编码取决于您
以下是如何阅读和理解这方面规范的详细说明:
它归结为令牌值的以下正则表达式格式:
[-a-zA-Z0-9._~+/]+=*
这是否意味着Ambassador本身不进行任何API密钥检查,而我始终必须为此提供额外的服务?对于开源版本,那么是的,唯一的身份验证方法是通过外部服务。我的开发团队对此也很失望,但在开发了额外的服务之后,我们享受了创建自己的规则和身份验证机制的灵活性,这对于每个端点都是不同的。根据付费版本页面,该版本已与OAuth集成,JWT验证和API密钥功能即将推出。亲版本是相当新的,所以我认为大多数用户的大使得到了良好的外部授权。
apiVersion: ambassador/v1
kind: Mapping
name: myapp-mapping
prefix: /myapp/
service: myapp:8000
apiVersion: ambassador/v1
kind: Mapping
name: login-mapping
prefix: /login/
service: login-app:8080
bypass_auth: true
[-a-zA-Z0-9._~+/]+=*