HAProxy 从请求中读取 cookie,并将其重新分配为自定义标头

HAProxy 从请求中读取 cookie,并将其重新分配为自定义标头

Cookie我正在从身份验证服务中接收 JWT 令牌作为其一部分。

Cookie: "jwt_token=eyBGfdr..................."

现在,我需要在 HAProxy 中读取该 cookie,提取jwt_token密钥并添加一个名为的自定义标头jwt_token并分配值eyBGfdr,最后将请求转发给其他服务。

我已经使用指令找到了解决方案的一部分http-request set-header,但我不确定如何读取 cookie 并将其存储在变量中以供指令使用set-header

附加说明:我的 haproxy 位于身份验证服务器和 Web 服务之间。身份验证服务器创建 JWT 令牌并将其作为 cookie 插入。但是,另一端的 Web 服务只能使用自定义标头读取 JWT。因此,我试图让我的 haproxy 以某种方式工作,以便它可以从 cookie 中拦截 JWT 令牌并将其放入自定义标头中,以便 Web 服务也可以读取它。

答案1

haproxy配置文件

global
    debug
frontend web1
    bind *:8080
    mode http
    default_backend app1
backend app1
    mode http
    http-request set-header jwt %[req.cook(jwt_token)]
    server s1 127.0.0.1:8000

haproxy 版本

Nuster version 1.8.8.2.2
Copyright (C) 2017-2018, Jiang Wenyuan, <koubunen AT gmail DOT com >

HA-Proxy version 1.8.8.2 2018/05/29
Copyright 2000-2018 Willy Tarreau <[email protected]>

服务器端

#!/usr/bin/env python

import SimpleHTTPServer
import SocketServer
import logging
import time

PORT = 8000

class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):

    def do_GET(self):
        logging.error(self.headers)
        SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)

Handler = GetHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)

httpd.serve_forever()

卷曲

curl -v http://127.0.0.1:8080/xxx --cookie "jwt_token=asdf"

*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /xxx HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.60.0
> Accept: */*
> Cookie: jwt_token=asdf
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: SimpleHTTP/0.6 Python/2.7.10

server.py 日志:

User-Agent: curl/7.60.0
Accept: */*
Cookie: jwt_token=asdf
jwt: asdf

127.0.0.1 - - [08/Jun/2018 13:30:19] "GET /xxx HTTP/1.1" 200 -

相关内容