Nginx proxy_pass: поместить тело ответа в файл cookie
совершенно новый для nginx, я пытаюсь реализовать некоторый веб-поток oauth2:
- клиент просит логин,
- nginx, который я использую в качестве обратного прокси-сервера, перенаправляет на поставщика аутентификации,
- nginx передает обратный вызов поставщику аутентификации, получая токен аутентификации с заданным кодом,
- у клиента есть токен.
Меня это не устраивает, я хотел бы поместить токен аутентификации в файл cookie только для http, и я уверен, что nginx может это сделать, но я не уверен, как это сделать... Что я пробовал до сих пор:
location /callback {
proxy_method POST;
add_header Accept application/json;
proxy_pass https://myauthprovider?client_id=theclientid&redirect_uri=theredirecturi&client_secret=thesecret&code=$arg_code;
add_header Set-Cookie "payload=whattoputhere?";
}
The add_header
была моя первая попытка, но я не могу найти ничего, чтобы получить тело ответа в местоположении nginx.
Поэтому я добавилnjs
модуль иjs_body_filter jwt_auth.setcookieswithtoken;
к/callback
расположение:
location /callback {
proxy_method POST;
add_header Accept application/json;
js_body_filter jwt_auth.setcookieswithtoken;
proxy_pass https://myauthprovider?client_id=theclientid&redirect_uri=theredirecturi&client_secret=thesecret&code=$arg_code;
add_header Set-Cookie "payload=whattoputhere?";
}
Вот .js:
function setcookieswithtoken(req, data, flags) {
var payload = data.split("&");
var token = payload[0].substring(payload[0].indexOf("=") + 1);
ngx.log(ngx.ERR, ">>>>>>token: " + token);
ngx.log(ngx.INFO, ">>>>>>token: " + token);
// var user = payload[2].substring(payload[2].indexOf("=") + 1);
// ngx.log(ngx.ERR, ">>>>>>user: " + token);
var cookies = req.headersOut['Set-Cookie'];
cookies.push("token=" + token +"; HttpOnly; Secure");
req.headersOut['Set-Cookie'] = cookies;
req.sendBuffer(data, flags);
}
export default { setcookieswithtoken };
К сожалению, в ответ не были добавлены файлы cookie. Я также не вижу сообщений об ошибках или информационных сообщений, которые я добавилngx.log
что странно для меня .. Что мне не хватает?