2016-09-30 4 views
6

現在、ユーザーが既にログインしているかどうかを調べるために、Shiro Tokenシステムを使用してTomcatサーブレットにSpringを実行しているサーバーがあります。クロスドメイン要求が可能です。 (一般的に角度を使用して)クライアント上の私ができる任意の他のドメインでnode.jsからの資格情報を使ったリバースプロキシログイン

限り、私はすでに(トークンの有効期限が切れていません)にログインしていて...

http.get('https://<my_check_login_service>', {withCredentials: true})

呼び出し...とユーザー情報(名前、アバターなど)を返します。

私は、今、それは私がユーザーを取得するために、上記のmy_check_login_serviceに上のノードサーバを呼び出して、それをプロキシを持っていると思いれる(また、クライアント側のための角度を提供する)ノードサーバである別のシステムを持っていますセッションオブジェクトの情報を(expressを使用して)設定してから、ユーザーをクライアントに返します。しかし、セッションオブジェクトを通じて、ログインサービスから返されたユーザーのセキュリティレベルに応じて、彼らの接続を信頼し、さらにAPIコールを実行できるようにします。私はプロキシがこれを行うことができますNode.jsのルータで

...

app.get('/checklogin', function(req, res) { 
    req.pipe(request.get("https://<my_check_login_service>").pipe(res); 
} 

...しかし、私はサービスに適切な資格情報を渡す方法がわかりません。私がしなければ私のlogin_serviceのための資格情報がローカルサーバーに送信されていないので...

http.get('checkLogin', {withCredentials: true})

...それは、もちろん、動作しません。この作業を行うために正しい資格情報を渡すにはどうすればよいですか?

乾杯。

答えて

2

資格情報は、元の要求のアドレスで、(要求からと応答の両方)すべてのヘッダーを渡し、HTTPヘッダの中で最も可能性があり、それを動作させる必要があります。

app.get('/checklogin', function(req, res) { 
    console.dir(req.headers) 
    //You can inspect the headers here and pass only required values 
    const options = { 
    url: 'https://<my_check_login_service>', 
    headers: Object.assign(
     //Tell the login service about address of original request 
     {'X-Forwarded-For': req.connection.remoteAddress} 
     req.headers) 
    } 
    req.pipe(request.get(options)) 
    .on('response', (response) => res.set(response.headers)) 
    .pipe(res) 
} 

この例では、元のアドレスを渡し設定によっては、X-Forwarded-Forlogin_serviceが認識される可能性があります。

+0

はい!ありがとうございました!私はそれが動作するようにするためにワイルドカード証明書が必要になることを今や認識しているので、それがうまくいくかどうかは完全にはわかりません。しかし、この変更で、私は今 "エラー:ホスト名/ IPが証明書のaltnamesと一致しません:" ... "私はワイルドカードの証明書がこの権利を修正すると仮定しています。私はそれを二乗するとこれを更新します。 – crowmagnumb

+0

'login_service'はクライアントのIPアドレスもチェックするので、プロキシはそれを渡すべきです。 私はそれを答えに追加しています – DarkKnight

+0

悲しいことに、うまくいきません。ヘッダーを追加すると、少なくともサーバーに何らかの情報が通知されますが、ログインに必要なセキュリティトークンは渡されません。私がやりたいことは不可能だと思うし、OAuthシステムを実装するだけです。賞金の期限が切れる前に私が他の答えを得なければ、私はそれをあなたに確実に渡します。ありがとうございました。 :) – crowmagnumb