Nginx内省OAUTH令牌

时间:2019-06-07 16:01:58

标签: nginx keycloak

我正在设置一个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
}

我发现此错误是由于令牌未正确作为请求中的主体参数传递的。脚本中我缺少什么?实际上,我只需要使用Authorization标头中传递的auth令牌,并将其传递到body参数中的Keycloak服务器。

PS:Keycloak希望在x-www-form-urlencoded主体中将oauth令牌作为参数作为token

0 个答案:

没有答案