2016-11-15 14 views
3

私はauth0/angular2-jwtライブラリを使用して、リクエストごとにJWTを追加しています。HTTPリクエストのAngular2 Set-Cookie JSESSIONID

各リクエストにJSESSIONIDクッキーを追加するにはどうすればよいですか。私はサーバー側セッションにヒットしましたか?

これは良い方法ですか?

私はそれは良い習慣ですノー成功

let myHeader = new Headers(); 
myHeader.append('SET-COOKIE', 'JSESSIONID=<jsessionid>'); 

this.authHttp.get(endpoint, {headers: myHeader, withCredentials: true}).map(res => res.json()).subscribe(
    jwt => { 
    ... 
    },err => console.log(err)); 

答えて

8

でこれを試してみましたか?

いいえ、いい方法ではありません。 JWTのドキュメントから

:認証で

、ユーザーが正常に自分の資格情報を使用してログインする、JSONウェブトークンが返され、(通常はローカルストレージにローカルに保存する必要がありますが、クッキーをすることができまた、サーバーでセッションを作成してクッキーを返す従来のアプローチのの代わりにが使用されています。

参考:https://jwt.io/introduction/https://jwt.io/introduction/

JSESSIONID

あなたはブラウザに保存されたクッキーの複数の種類があることを知っておく必要があります。それらの多くはJSコードからアクセスできますが、そのうちのいくつかはhttpOnlyです。これは、ブラウザがJSコードに対して透過的に要求を追加することができることを意味します(コードにCookieが表示されません)。サーバ側のデフォルト実装JSESSIONIDは、httpOnlyのクッキーの例です。このようなデザインには複数のセキュリティ上の理由があります。ページ上のJSマルウェアはクライアントからセッションを盗むことができません。

ヘッダ

myHeader.append('SET-COOKIE', 'JSESSIONID=<jsessionid>');

これは、サーバーにクッキーを渡すための有効な方法ではありません。これは、クライアントに応答を送信し、クライアント上でクッキーを設定する正しい方法です。クッキーを渡したい場合は、

myHeader.append('Cookies', 'JSESSIONID=<jsessionid>'); 

でも使用できます。とにかくブラウザはそれ自身を追加します。 つまり、JSESSIONIDには、が自動的に追加されます。ブラウザによっては、となります。これがうまく動作しない場合は、JSESSIONIDのCookieがブラウザに設定されていない(Chrome開発者ツールを確認し、アプリケーションタブでCookieを表示できます)か、リモートサーバーを使用しています。この場合、CORSがあなたのアプリを破壊してしまいます)。

関連する問題