JSON Webトークン(JWT)を使用したスーパーチャージJava認証

Javaアプリケーションで安全な認証を構築する準備はできていますか。トークン(特にJSON Webトークン)を使用する利点がわからない、またはそれらをどのように展開する必要があるか私はこれらの質問に答えることに興奮しています、そして、このチュートリアルであなたにもっともっと!

JSON Web Tokens(https://en.wikipedia.org/wiki/JSON Web Token[JWTs])、およびhttps://github.com/jwtk/jjwt[JJWT library](StormpathのCTOによって作成された、Les Hazlewoodとhttps://github.com/jwtk/jjwt/graphs/contributors[貢献者のコミュニティ]によって維持されています)、いくつかの基本をカバーしましょう。

1認証とトークン認証

アプリケーションがユーザーの識別情報を確認するために使用するプロトコルのセットは認証です。アプリケーションは伝統的にセッションクッキーを通してアイデンティティを持続させてきました。このパラダイムは、セッションIDのサーバー側の記憶域に依存しているため、開発者は、一意でサーバー固有のセッション記憶域を作成するか、またはまったく別のセッション記憶域層として実装する必要があります。

トークン認証は、サーバーサイドのセッションIDができなかった問題と解決できなかった問題を解決するために開発されました。従来の認証と同様に、ユーザーは検証可能な資格情報を提示しますが、現在はセッションIDではなくトークンのセットが発行されます。初期の認証情報は、標準のユーザー名とパスワードのペア、APIキー、または別のサービスからのトークンでさえあります。

(StormpathのAPIキー認証機能はその一例です。)

** 1.1. なぜトークン?

非常に簡単に言うと、セッションIDの代わりにトークンを使用すると、サーバーの負荷を軽減し、権限管理を合理化し、分散型またはクラウドベースのインフラストラクチャをサポートするための優れたツールを提供できます。 JWTの場合、これは主にこれらのタイプのトークンのステートレスな性質によって達成されます(詳細は後述)。

トークンは、次のようなさまざまなアプリケーションを提供します。 .org/html/rfc6749[OAuth 2.0]相互作用、セッションID、および認証表現としての(クッキー中の)ほとんどの場合、標準はトークンの特定のフォーマットを指定しません。これは典型的なhttps://docs.spring.io/spring-security/site/docs/current/reference/html/web-app-security.html#csrf-include-csrf-token[Spring Security CSRFトークンの例です。]HTML形式で:

<input name="__csrf" type="hidden"
  value="f3f42ea9-3104-4d13-84c0-7bcb68202f16"/>

正しいCSRFトークンなしでそのフォームを投稿しようとすると、エラー応答が返されます。これがトークンの有用性です。上記の例は「ダム」トークンです。これは、トークン自体から収集される固有の意味がないことを意味します。これはまたJWTが大きな違いを生む場所です。

前の投稿:カスタムJUnit 4テストランナー
次の投稿:Java String.copyValueOf()