2017-04-10 75 views
3

我想從我的請求頭字段Authorization中緩存令牌。來自auth_request的高速緩存令牌

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 ""; 

     } 

這是我的設置,但這不起作用。

我希望你能幫助我。

問候!

回答

1

請問您的驗證服務器設置cookie?如果是的話,你還需要proxy_ignore_headers "Set-Cookie";

2

是你要實現什麼樣的認證?它是一個站點範圍的身份驗證機制,每個經過身份驗證的用戶對內容擁有相同的權限?或者是更微妙的,一個給定的用戶可以訪問或不訪問某些資源?

因爲如果它是後者,那麼您就有效地將您的應用程序打開爲一個安全漏洞 - 任何經過身份驗證的用戶都將能夠使用他們的身份驗證令牌執行他們可能或不可以享有的操作,假設在查詢中作爲參數傳遞的任何用戶名或ID都將完全受信任,只要當正確的用戶名/ ID出現在經過驗證和緩存的原始授權請求中時,該令牌首先被緩存。


另外,需要注意的是緩存不支持之前讓nginx 1.7.3,按http://nginx.org/r/auth_request


另外,還要注意,默認情況下,在請求或響應的餅乾存在將同樣地,排除從與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 "";