Я получаю токен JWT как часть Cookie
из службы авторизации.
Cookie: "jwt_token=eyBGfdr..................."
Теперь мне нужно прочитать этот файл cookie в HAProxy, извлечь jwt_token
ключ и добавьте настраиваемый заголовок с именем jwt_token
и присвоить значение eyBGfdr
и, наконец, перенаправить запрос в другую службу.
Я выяснил часть решения, используя http-request set-header
директиву, но я не уверен, как прочитать файл cookie и сохранить его в переменной для использования с set-header
директива.
Дополнительное объяснение: мой haproxy находится между сервером аутентификации и веб-службой. Сервер аутентификации создает токен JWT и вставляет его как файл cookie. Но веб-служба на другой стороне может читать JWT только с использованием настраиваемых заголовков. Следовательно, я пытаюсь заставить свой haproxy работать таким образом, чтобы он мог перехватывать токен JWT из файла cookie и помещать его в настраиваемый заголовок, чтобы веб-служба также могла его прочитать.
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
версия 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 <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 -