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 -