Nginx для анализа OAUTH токена - PullRequest
0 голосов
/ 07 июня 2019

Я устанавливаю обратный прокси-сервер Nginx, который направляет запросы к различным базовым микросервисам на основе пути. Кроме того, перед маршрутизацией запросов я бы хотел, чтобы Nginx проверил действительность маркера oauth, переданного в заголовке запроса. Я использую Keycloak в качестве oauth-сервера, хотя я мог анализировать токен из других приложений (и почтальона), и мне трудно реализовать его в Nginx.

nginx.conf

map $http_authorization $token {
  ~*^Bearer\s+([\S]+)$ $1;
}

location / {
  auth_request /auth;
  error_page 401 =401 /auth;
  proxy_pass http://backend-api/; 
}

Блок проверки токена

location = /auth {
  # internal;
  gunzip on;
  proxy_method POST;
  proxy_set_header Authorization "Basic base64encoded-uid-pwd";
  proxy_set_header Content-Type "application/x-www-form-urlencoded";
  proxy_set_body "token=$token";
  proxy_pass https://keycloak-server/auth/realms/myrealm/protocol/openid-connect/token/introspect;

  # proxy_cache           token_responses; # Enable caching of token introspection responses
  # proxy_cache_key       $access_token;   # Cache the response for each unique access token
  # proxy_cache_lock      on;              # Don't allow simultaneous requests for same token
  # proxy_cache_valid     200 10s;         # How long to use cached introspection responses
  # proxy_cache_use_stale error timeout;   # Use old responses if we cannot reach the server
  # proxy_ignore_headers  Cache-Control Expires Set-Cookie; # Cache even when receiving these

}

Nginx отправляет запрос на сервер Keycloak, я проверил журнал, но получаю ответ об ошибке ниже от Keycloak

{
"active": false
}

Я обнаружил, что эта ошибка произошла из-за того, что токен неправильно передан в качестве параметра body в запросе. Чего мне не хватает в сценарии? На самом деле мне нужно взять только токен аутентификации, переданный в заголовке Authorization, и передать его серверу Keycloak в параметре body.

PS: Keycloak ожидает жетон oauth как param в теле x-www-form-urlencoded как token.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...