Назад | Перейти на главную страницу

HAProxy считывает файл cookie из запроса и повторно назначает его как настраиваемый заголовок

Я получаю токен 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 -