2017-08-02 84 views
0

我正在使用openresty nginx v1.11.2.4。我希望能夠在用戶訪問資源之前或者在他們嘗試在服務器上放置某些內容之前對其進行身份驗證。我使用的http_auth_request_module和下面的是,除了從我的nginx.conf文件:如何處理來自www-authenticate在nginx中的響應?

location /video/ { 
     auth_request /auth; 
     root /usr/local/openresty/nginx/html; 
    } 

    location = /auth { 
     more_set_headers "WWW-Authenticate: Basic"; 
     return 401; 
    } 

這將導致瀏覽器要求用戶憑據正常的,但現在我如何才能/處理來自客戶端的用戶憑據?

回答

-1

的答案,這裏的問題如下:Nginx authentication with auth_request module 我能夠在我的nginx.conf文件訪問$ HTTP_AUTHORIZATION變量來處理用戶名和密碼。以下是我的nginx.conf的摘錄:

location /video { 
     satisfy any; 
     auth_basic "Private Property"; 
     auth_basic_user_file /usr/local/openresty/nginx/conf/htpasswd; 
     auth_request /auth; 
     root /usr/local/openresty/nginx/html; 
     client_max_body_size 1000M; 
     if ($request_method != "GET"){ 
      content_by_lua_file /root/Documents/contentbylua.lua; 
     } 
    } 

location = /auth { 
    set $authHeader $http_authorization; 
    set $authUName $remote_user; 
    content_by_lua_file /root/Documents/restrict.lua; 
} 

下的conf讓我其證書存儲在redisDB在200或401碼取決於其返回restrict.lua文件中的用戶進行身份驗證用戶憑據返回到/位置塊。

響應(用戶名&密碼)由ngx.var.authHeader在restrict.lua文件中訪問。一些字符串處理是爲了移除'Basic',然後剩餘部分被base64解碼,然後對其進行一些字符串處理以獲得密碼。這就是全部

+0

這實際上是誤用了ngx_http_auth_request_module和ngx_http_auth_basic_module。如果您基於Redis實施auth,只需在同一位置的access_by_lua_ *內運行您的代碼即可。從Lua中你已經可以訪問所有的nginx變量。無需設置指令。爲什麼你使用auth_basic *指令? –

+0

我使用auth_basic指令來提示輸入用戶憑證。我看到你的不必要的設置指令。 – Ayudh

+0

將access_by_lua *添加到/視頻位置。檢查授權標頭是否存在。如果沒有 - 用401和WWW-Authenticate進行響應。如果授權存在,請根據Redis進行檢查。並完全刪除ngx_http_auth_request_module和ngx_http_auth_basic_module。 –