2016-08-09 12 views
3

不透明なセッショントークンよりも安全なJSON Webトークンを使用する方法両方のシナリオでは、トークンは最初にクライアントに送信され、クライアントが保護されたリソースを要求するとサーバー上で検証されます。JSON WebトークンはCookie /セッションよりもどのように安全ですか?

+0

次の項目を確認できます。http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions – dbautistav

答えて

3

人々は、JWTがより安全であると言ういくつかの理由があります。私はそれらを列挙し、両方の方法でそれが振る舞うときに本当にそうでないかもしれない理由を説明します。

  1. JWTsはHS256やRS256などの安全なアルゴリズムと秘密を使用して署名することができます。総合的なリストはhereです。さらに、JSON Webトークンのペイロードを暗号化することもできます。ただし、セッショントークンは、トップノッチアルゴリズムで安全に生成し、署名付きのCookieに格納することもできます。

  2. JWTは、CookieまたはWeb Storage(ローカル/セッションストレージ)に格納できます。 JWTをクッキーに保存していない場合は、CSRFに対して脆弱ではありません。また、HTTPリクエストごとにAuthorizationヘッダーを使用して送信することもできます。しかし、まだ注意が必要です。 JavascriptはWebストレージからJWTにアクセスするために使用されますが、それでもXSS(クロスサイトスクリプティング)などの他の攻撃方法を利用できます。値するのは、CSRFよりもXSSを扱うほうが簡単だということです。

  3. あなたのJWTが改ざんされた状況では、トークンを取り消したり、ブラックリストに登録することができます。これは私があなたにすることを勧めないこの種の操作を実行するたびに、DBに電話をかけることを含みます。優先オプションは、短命トークンを使用することです。 OAuthの場合

、さもなければベアラトークンとして知られる不透明トークンが満了と共にサーバにハッシュ化されたストレージのいくつかの種類に格納されるランダムな文字列は、要求された範囲(例えば、友達リストへのアクセス)、あります同意したユーザーその後、APIが呼び出されると、このトークンが送信され、ハッシュテーブルでサーバーのルックアップが行われ、コンテキスト決定が行われます(期限切れでしたか?このトークンには、アクセスされましたか?)。不透明トークンと署名付きトークン(JWTなど)の主な違いは、JWTがステートレスであることです。それらはハッシュテーブルに格納する必要はありません。

結論

署名し、あなたのJWTsがあなたの認証プロセスを確実にするために安全であるべきで暗号化するために使用するライブラリも安全です。また、ログインのために使用するのではなく、ストレージメカニズムとしてクッキーを使用する必要があります。 JWTの使用には、拡張が容易で、OAuthの場合にはarticleにあるような利点があると主張できます。その日の終わりに、私の意見では、認証や承認に使用されるトークンの形式に関係なく、アプリケーションをセキュリティで保護するための正しい手順を確実に実行するために、開発者の推論/ロジックに単純に該当します。この場合、ユースケースも重要です!

関連する問題