Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 大使API密钥认证_Authentication_Kubernetes_Api Gateway - Fatal编程技术网

Authentication 大使API密钥认证

Authentication 大使API密钥认证,authentication,kubernetes,api-gateway,Authentication,Kubernetes,Api Gateway,我试图弄清楚如何在k8s上创建一个简单的API密钥保护代理,但似乎找不到任何关于这个的文档 具体地说,我只想对它进行设置,这样它就可以接受带有API-KEY头的请求,对其进行身份验证,如果API-KEY对某个客户端有效,则将其传递到我的后端 我建议您执行以下操作: 创建身份验证应用程序:对于每个受保护的端点,此应用程序将负责验证Api密钥 配置Ambassador以将请求重定向到此服务:您只需注释身份验证应用程序服务定义。例如: 在auth app中配置与要进行身份验证的应用的端点相对应的端点。

我试图弄清楚如何在k8s上创建一个简单的API密钥保护代理,但似乎找不到任何关于这个的文档


具体地说,我只想对它进行设置,这样它就可以接受带有API-KEY头的请求,对其进行身份验证,如果API-KEY对某个客户端有效,则将其传递到我的后端

我建议您执行以下操作:

  • 创建身份验证应用程序:对于每个受保护的端点,此应用程序将负责验证Api密钥

  • 配置Ambassador以将请求重定向到此服务:您只需注释身份验证应用程序服务定义。例如:

  • 在auth app中配置与要进行身份验证的应用的端点相对应的端点。假设您有一个映射如下的应用程序:
  • 然后,您需要在auth-app中有一个端点“/myapp/”。您将在那里阅读API-KEY标题。如果密钥有效,则返回HTTP 200(确定)。大使随后会将原始信息发送到myapp。如果auth app返回HTTP 200之外的任何其他内容,Ambassador将向客户端返回该响应

  • 绕过所需应用中的身份验证。例如,您可能需要一个登录应用程序,负责向客户端提供API密钥。您可以使用映射中的绕过\u auth:true绕过这些应用的身份验证:
  • 如果您想了解更多有关大使身份验证的信息


    编辑:如果您使用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._~+/]+=*