私は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を読み取ることができなくなります。私はこれについて混乱しています。ありがとうございます。
localStorageを使用してください。 XSS攻撃が心配な方は、信頼できないJavaScriptコードにiframeを使用してください。 – Darkrum