2016-10-12 4 views
0

私はJSON Webトークンに関する記事を読んでいて、サーバーセッションを避けるためにパーティー間で情報を送信する安全なメカニズムです。クッキーが無効になっているときのJWTの管理方法

私は、Java、Tomcat、Webサービス用のJerseyフレームワーク、JWT用のJOSE4Jを使用してゼロからWebアプリケーションを構築しています。

多くの記事のアドバイスは、クッキーのHttpOnlyの代わりのlocalStorageを使用するには、私はすでにクッキーとJWTと、次のように安らかなメソッドを作成しました

@GET 
@Path("/authenticate") 
@Produces(MediaType.APPLICATION_JSON) 
public Response authenticate(
     @HeaderParam("username") String username, 
     @HeaderParam("password") String password) throws JSONException, 
     IOException, JoseException { 
     Service service = Service.getInstance(); 
     EmployeeProfile employeeProfile = service.authenticate(username, password); 
     // Temporarily httponly and secure as false to test 
     NewCookie cookie = new NewCookie("jwt", service.getToken(), null, null, null, 900, false, false); 
     return Response.status(200).cookie(cookie).entity(employeeProfile).build(); 
    } 
    return Response.status(204).entity(null).build(); 
} 

私はChromeで私のWebアプリケーションを実行すると、私がすることができますクッキーが正しく保存されていることを確認してください。

ここでは、このトークンを使用して、もう一度認証する必要がなく、さらに安らかなメソッドを呼び出すことができますが、Cookieが無効になっている場合はどうなりますか?シークレットモードでテストした結果、Cookieを取得できません。その場合、Cookieが有効になっているかどうかを確認し、ログインプロセスを進めるためにCookieが有効になっていることをユーザーに警告できます。

$.cookie('test_cookie', 'cookie_value', { path: '/' }); 
if ($.cookie('test_cookie') !== 'cookie_value') { 
    //Cookies are disabled. Show a modal. 
} 

をしかし、これは非常に制限的である:

がクッキーを確認するには、私はこれを行います。だから私は、サーバーからjwtを取得する私の代わりになるだろうか?私はこれについてはよく分かりませんが、jsonをjsonの応答の一部として送信し、それがXSS攻撃にトークンを公開する可能性があるとしても、localStorageに保持するようにコントローラを変更する必要がありますか?ただし、クッキーを使用するとCRSF攻撃の影響を受けやすくなりますが、httpOnlyとセキュリティ保護されたプロパティをtrueに設定しても問題はありませんが、その場合はjavascriptでCookieを読み取ることができなくなります。私はこれについて混乱しています。

ありがとうございます。

+1

localStorageを使用してください。 XSS攻撃が心配な方は、信頼できないJavaScriptコードにiframeを使用してください。 – Darkrum

答えて

0

あなたのコントローラを変更して、JWTを応答の一部とフラグhttpOnly有価証券のクッキーと一緒に送信する必要がありますが、問題はクライアント側でJWTを復号化し、そこから何らかの値を使用することです。 "いいえ"の場合、応答の一部としてJWTを送信する必要はありません。 "はい"の場合、トークンからすべての値を取り出し、応答ヘッダーに別のjsonオブジェクトを送信する方がよい。

+0

あなたの答えをありがとう。これは私にとって初めてのことなので、まだ少し混乱しています。あなたは、HTTPOnlyとしてヘッダーの応答を介してJWTを送信することを意味しますか?私はサーバー側でJWTの検証を行います。私は認証からJWTを受け取り、次の呼び出しのためにそれを保持したいだけです。私はJWTをどこに保持するのか正確にはありません。あなたの答えを理解するための簡単な例や読みやすい良いリンクを提供できますか?私はJWTとAuthorizationヘッダーについてのブログを読んでいます。しかし、あなたが意味するものなのかどうかはわかりません。再度ありがとうございます。 –

関連する問題