2016-01-19 140 views
5

我目前正在運行一個Node.js應用程序,並提供API和文件服務(我知道nginx可以處理它,但我不應該首先使用它)。基本身份驗證和JWT

我只是簡單地使用它來獲得一個簡單的基本認證,這並不是那麼簡單。

這裏是我的nginx的配置:

upstream nodejsapp { 
    server 127.0.0.1:1337; 
    keepalive 15; 
    } 

    server { 
    listen 80 default_server; 

    auth_basic "Restricted"; 
    auth_basic_user_file /etc/nginx/.htpasswd; 
    proxy_redirect off; 

    location/{ 
     proxy_pass http://nodejsapp; 

     proxy_set_header Connection "Keep-Alive"; 
     proxy_set_header Proxy-Connection "Keep-Alive"; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_set_header X-NginX-Proxy true; 
    } 
    } 

/etc/nginx/.htpasswd文件只是user:encryptedpassword和好。

有了這個配置,當我去我的IP是:

  • 問我的用戶名和密碼
  • 開始加載頁面
  • (有時)的用戶名和密碼
  • 又問
  • 完成加載頁面

到目前爲止好,即使它問了兩次密碼。

Node.js應用程序有一個JWT身份驗證,當我登錄時,網站重新加載,並從這裏,它無限期地詢問用戶和密碼(基本身份驗證),只要我點擊登錄。 JWT在我的本地存儲中。如果我在基本身份驗證提示上單擊取消,JWT將被刪除,並且我已退出,並且它會再次詢問基本身份驗證。

這是在Chrome上。使用Firefox和Safari,在JWT日誌記錄之後,它會自動從本地存儲中刪除令牌(並且我已註銷)。

這是很難解釋,我不能告訴你的網站。總之,主要的問題是JWT(node.js應用程序)被刪除。

+0

我不知道這是可能的混合基本認證和智威湯遜。我可能是錯的,但據我所知,這兩種方法都使用'Authorization'請求標題,所以它們不會讓人感到意外。 – Curious

+0

是的,經過一番研究,我確認它可能是問題 – Cohars

+0

不要以爲我可以找到任何修復。 – Cohars

回答

4

當我意識到這個問題是基本認證和智威湯遜之間的衝突(如@Curious在表彰的建議),他們使用的是Authorization頭兩者的解決方案是很容易的。

配置我的前端應用程序通過自定義標題,**JWTAuthorization**送JWToken,所以當請求到達服務器,它包含的兩個頭Authorization & JWTAuthorization。然後,它是相當簡單,基本身份驗證通過後,我只是更換頭(這裏的Node.js應用程式的基礎上,興亞):

app.use(function *(next) { 
    this.headers.authorization = this.headers.jwtauthorization; 
    yield next; 
});