我想从我的请求标题字段Authorization中缓存令牌。
Authorization : Bearer abcdefghijklmnopqrstuvwxyz
我的目标是,我不必验证验证服务器上的每个请求。如果Authorization-Token被缓存(并且有效),则请求应该在没有验证的情况下调用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 "";
}
这是我的设置,但这不起作用。
我希望你能帮助我。
问候!
答案 0 :(得分:1)
验证服务器是否设置了cookie?如果是这样,您还需要proxy_ignore_headers "Set-Cookie";
答案 1 :(得分:1)
您想要完成哪种身份验证?它是一种站点范围的身份验证机制,每个经过身份验证的用户对内容具有相同的权限吗?或者它是否更微妙,给定用户可能或可能无法访问某些资源?
因为如果是后者,那么您有效地将应用程序打开到安全漏洞 - 任何经过身份验证的用户都可以使用其身份验证令牌来执行他们可能或可能无权执行的操作,如大概,在查询中作为参数传递的任何用户名或ID都将完全受信任,前提是当在验证和缓存的原始授权请求中显示正确的用户名/ ID时,首先缓存令牌。
或者,请注意,根据http://nginx.org/r/auth_request,在nginx 1.7.3之前不支持缓存。
另请注意,默认情况下,请求或响应中存在Cookie同样会阻止内容缓存http://nginx.org/r/proxy_cache。根据{{3}},可能需要以下内容才能使缓存起作用:
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 "";