アプリケーションをセキュアに
JHipsterによって生成されたもののように、単一のWebページアプリケーションでSpring Securityを使用するには、XHRによるログイン/ログアウト/エラービューが必要です。これらのビューを正しく使用するためにSpring Securityを設定し、すべてのJavaScriptとHTMLコードを生成します。
デフォルトでは、JHipsterには2つの異なるユーザがいます。
- "user":これは"ROLE_USER"権限を持つ通常のユーザーです。デフォルトのパスワードは"user"です。
- "admin":"ROLE_USER"および"ROLE_ADMIN"権限を持つ管理ユーザーです。デフォルトのパスワードは"admin"です。
"ROLE_USER"と"ROLE_ADMIN"の2つの権限は、エンティティ に対して同じアクセスを提供します。つまり、"user"は"admin"と同じCRUD操作する権限を与えられています。この動作は、"user"が任意のエンティティを削除できるなどの理由で、アプリケーションが本番に移行するときに問題になる可能性があります。アクセス制御を改善する方法の詳細については、このブログ投稿を参照してください。
セキュリティ上の理由から、運用環境ではこれらのデフォルトパスワードを変更する必要があります。
JHipsterは、3つの主要なセキュリティメカニズムを提供します。
JSON Web Tokens (JWT)
JSON Web Token (JWT)認証はステートレス・セキュリティー・メカニズムなので、複数の異なるサーバー上でアプリケーションを拡張したい場合には良い選択肢です。
マイクロサービスアーキテクチャを使用する場合、これがデフォルトのオプションであることに注意してください。
この認証メカニズムは、デフォルトではSpring Securityには存在せず、Java JWTプロジェクトを統合しJHipsterに特化させたものです。
このソリューションでは、ユーザーのログイン名 と権限を保持するセキュア・トークンを使用します。トークンは署名されているため、ユーザーによる変更はできません。
JHipsterは、無効なJWTをカスタムアプリケーションメトリクスとして自動的に追跡します。モニタリングドキュメントを参照してください。
JWTをセキュアに
- JHipsterは、
jhipster.security.authentication.jwt.secret
とjhipster.security.authentication.jwt.base64-secret
という2つのSpring Bootプロパティを使用して設定できる秘密鍵を使用します。 2番目のオプションは、Base 64でエンコードされた文字列を使用し、より安全であると考えられるため、推奨します。両方のプロパティが設定されている場合は、レガシーな理由により、secret
プロパティ(セキュリティが低い方)が使用されます。 Base64プロパティを使用しない場合は、アプリケーションの起動時に警告が表示されます。 - これらのキーの最小長は512ビットである必要があります。十分な長さがない場合は、ログインに使用できません。その場合は、コンソールにその問題を説明する明確な警告が表示されます。
- 秘密鍵は
application-*.yml
ファイルで設定されています。これらの鍵は秘密にしておく必要があるので、プロダクションのプロファイル用に安全な方法で保管する必要があります。 通常、Spring Bootプロパティ設定を使用して設定できます。JHipster RegistryのようなSpring Cloud Configサーバを使用するか、 環境変数を使用するか、システム管理者によってアプリケーションの実行可能なWARファイルと同じディレクトリにSCPで置かれた特有のapplication-prod.yml
ファイルを使用します。 - デフォルトの"user"および"admin"パスワードは変更する必要があります。これを行う最も簡単な方法は、アプリケーションをデプロイし、"user/user"としてログインしてから"admin/admin"としてログインし、それぞれに対して"Account > Password"メニューを使用してパスワードを変更することです。
セッションベースの認証
これは「古典的な」Spring Security認証メカニズムですが、大幅に改善されています。HTTPセッションを使用するため、ステートフルなメカニズムです。複数のサーバでアプリケーションを拡張する場合は、各ユーザが同じサーバにとどまるように、スティッキセッションを備えたロードバランサを使用するか、Spring Sessionを追加して、メモリではなくデータベースにセッションを格納することを検討する必要があります。
セッションベースの認証をセキュアに
- Remember-me認証の場合、Remember-meキーは
application-dev.yml
およびapplication-prod.yml