簡體   English   中英

基本Auth和JWT

[英]Basic Auth and JWT

我目前正在運行一個Node.js應用程序,其中包含API和文件服務(我知道nginx可以處理它,但我最初不應該使用它)。

我只是用它來制作一個簡單的基本身份驗證,這恰好不是那么簡單。

這是我的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日志記錄之后,它會自動從本地存儲中刪除令牌(並且我已經注銷)。

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

當我意識到問題是Basic Auth和JWT之間的沖突 (正如@Curious在推薦中所建議的那樣),以及他們都使用Authorization標頭時,解決方案非常簡單。

我將前端應用程序配置為通過自定義標頭**JWTAuthorization**發送JWToken,因此當請求到達服務器時,它包含頭文件AuthorizationJWTAuthorization 然后它非常簡單,在傳遞基本身份驗證之后,我只需替換頭文件 (這里是基於Koa的Node.js應用程序):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM