5

我想从我的请求标头字段授权中缓存令牌。

Authorization : Bearer abcdefghijklmnopqrstuvwxyz

我的目标是,我不必验证验证服务器上的每个请求。如果授权令牌被缓存(并且有效),那么请求应该调用 API 而无需验证。

location /main {
            auth_request /auth;
            proxy_ignore_headers Cache-Control;
            proxy_pass http://API;
            proxy_http_version 1.1;

        }


location /auth {
            internal;
            proxy_cache my_cache;
            proxy_ignore_headers Cache-Control;
            proxy_cache_key "$http_authorization";
            proxy_pass https://validationserver;
            proxy_pass_request_body off;
            proxy_set_header Content-Length "";

        }

这是我的设置,但这不起作用。

我希望你能帮助我。

问候!

4

2 回答 2

2

您要完成哪种身份验证?它是一种站点范围的身份验证机制,其中每个经过身份验证的用户对内容具有相同的权限吗?或者更微妙的是,给定用户可能有权访问某些资源,也可能无权访问某些资源?

因为如果是后者,那么您实际上是在向安全漏洞开放您的应用程序——任何经过身份验证的用户都可以使用他们的身份验证令牌来执行他们可能有权或可能无权执行的操作,大概是任何用户名或在查询中作为参数传递的 ID 将是完全信任的,前提是当正确的用户名/ID 出现在经过验证和缓存的原始授权请求中时,令牌首先被缓存。


或者,请注意,根据http://nginx.org/r/auth_request,在 nginx 1.7.3 之前不支持缓存。


另外,请注意,默认情况下,请求或响应中存在 cookie 同样会阻止内容被http://nginx.org/r/proxy_cache缓存。根据http://serverfault.com/questions/462799/leverage-proxy-caching-with-nginx-by-removing-set-cookie-header/467774#467774,因此可能需要以下内容才能使缓存工作:

    proxy_hide_header       Set-Cookie;
    proxy_ignore_headers    Set-Cookie;
    # important! Remember the special inheritance rules for proxy_set_header:
    # http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_set_header
    proxy_set_header        Cookie "";
于 2017-05-28T22:21:06.700 回答
1

您的验证服务器是否设置了 cookie?如果是这样你还需要proxy_ignore_headers "Set-Cookie";

于 2017-05-26T20:04:20.000 回答