Haproxy

HAProxy 從請求中讀取 cookie 並將其重新分配為自定義標頭

  • June 8, 2018

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 服務也可以讀取它。

haproxy.conf

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

代理版本

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 <willy@haproxy.org>

server.py

#!/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 -

引用自:https://serverfault.com/questions/915694