これはSpring SecurityとSpring BootでJWT (JSON Web Token) を使用するためのデモです。最初のバージョンを完全に書き直しました。このソリューションは、JHipster プロジェクトのコード ベースに基づいています。 JWT-Authentication に必要な最小限の構成とクラスを抽出して、いくつかの変更を加えてみました。
このデモは Maven 3.6.x と Java 11 でビルドされています。
Spring Boot Maven プラグイン ( mvn spring-boot:run
) を使用してアプリケーションを起動するだけです。アプリケーションは http://localhost:8080 で実行されています。
H2 コンソールを使用して、http://localhost:8080/h2-console にあるデータベースを探索できます。
API のエンドポイントへのさまざまなレベルのアクセスとさまざまな認可例外を示すために、3 つのユーザー アカウントが存在します。
Admin - admin:admin
User - user:password
Disabled - disabled:password (this user is deactivated)
デモに適したエンドポイントは 4 つあります。
/api/authenticate - authentication endpoint with unrestricted access
/api/user - returns detail information for an authenticated user (a valid JWT token must be present in the request header)
/api/persons - an example endpoint that is restricted to authorized users with the authority 'ROLE_USER' (a valid JWT token must be present in the request header)
/api/hiddenmessage - an example endpoint that is restricted to authorized users with the authority 'ROLE_ADMIN' (a valid JWT token must be present in the request header)
私は小さな Javascript クライアントを作成し、このデモを理解できるようにコードにいくつかのコメントを追加しました。これは /src/main/resources/static/js/client.js にあります。
パスワードのエンコードに bcrypt を使用しています。このシンプルなツールを使用してハッシュを生成できます: Bcrypt Generator
実際、このデモでは Spring Boot によって自動的に構成される組み込み H2 データベースが使用されています。別のデータベースに接続する場合は、リソース ディレクトリのapplication.ymlで接続を指定する必要があります。 MySQL DB の例を次に示します。
spring:
jpa:
hibernate:
# possible values: validate | update | create | create-drop
ddl-auto: create-drop
datasource:
url: jdbc:mysql://localhost/myDatabase
username: myUser
password: myPassword
driver-class-name: com.mysql.jdbc.Driver
ヒント: MySQL などの他のデータベースの場合、シーケンスは ID 生成に機能しません。したがって、エンティティ Bean の GenerationType を「AUTO」または「IDENTITY」に変更する必要があります。
すべてのアプリケーション プロパティのリファレンスはここにあります。
#81
このプロジェクトには Docker イメージがあります。 https://hub.docker.com/r/hubae/jwt-spring-security-demo/ で見つけることができます。
プロジェクト関連の質問がある場合は、過去の質問を参照するか、質問を含む新しいチケットを作成してください。
このプロジェクトに直接関係のない質問がある場合 (例: Spring Framework や Spring Security に対するよくある質問など)、Web を検索するか、Stackoverflow を参照してください。
申し訳ありませんが、今とても忙しくてあまり時間がありません。
ステファン・ゼルフーセン
コードは MIT ライセンスに基づいてリリースされています。
フィードバックやご質問をお気軽にお送りください。