2016-01-19 28 views
5

私は現在、APIとファイルを提供するNode.jsアプリケーションを実行しています(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に行くこと:

  • がページをロードするために
  • 開始私にユーザー名とパスワードを要求する
  • (時々)
  • ユーザーとパスワード
  • のために再度尋ね
  • ページの読み込みを終了します

これまでのところ、パスワードが2回尋ねられたとしても、それほど良いものでした。

Node.jsアプリケーションにはJWT認証があります。ログインすると、Webサイトがリロードされ、ここから、ログインをクリックすると、ユーザーとパスワード(基本認証)が無期限に要求されます。 JWTは私のローカルストレージにあります。基本認証のプロンプトで[キャンセル]をクリックすると、JWTが削除されてログアウトされ、基本認証が再度尋ねられます。

これはChrome版です。 FirefoxとSafariでは、JWTロギングの後、自動的にトークンがローカルストレージから削除されます(ログアウトされます)。

説明が難しく、ウェブサイトを表示できません。要するに、主な問題はJWT(node.jsアプリの)が削除されていることです。 I問題が(@Curiousは称賛に示唆されるように)基本認証とJWT間競合であり、それらは両方Authorizationヘッダを使用して、溶液が非常に容易であったことをことを理解

+0

:基本認証が渡された後、次に、それは、非常に単純ですが、私はちょうど(ここ興亜に基づいてのNode.jsアプリケーション、上)のヘッダーを置き換えますとJWT。私は間違っているかもしれませんが、私が知る限り、どちらのメソッドも 'Authorization'リクエストヘッダーを使用しているので、彼らが驚くべきことではありません。 – Curious

+0

はい、いくつかの調査の後で、問題がある可能性があることを確認します – Cohars

+0

これについての修正が見つかるとは思わないでしょうか。 – Cohars

答えて

4

。要求がサーバーに当たったとき

私はカスタムヘッダー、**JWTAuthorization**経由JWTokenを送信するために私のフロントエンド・アプリケーションを構成し、そう、それは両方のヘッダAuthorization & JWTAuthorizationが含まれています。私はそれが基本認証を混在させることは可能ですかわからない

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