定義方法
「環境」メニューから「アプリケーション」を選択します。
ここで用意された「アカウントパスワード」を設定します。本設定はプロジェクト全体に渡って適用されます。
パスワードハッシュ化
DBにパスワードを格納する際にパスワードのハッシュ化を行います。
ハッシュ化されたパスワードは管理者であっても解析することはできません。
この値の標準はraw(パスワードはハッシュ化されず平文で扱う)となっています。
種類 |
説明 |
備考 |
raw |
パスワードはハッシュ化されず平文で扱われます。 |
非推奨 |
md5 |
ハッシュアルゴリズムにMD5を利用します。 |
sha-1 |
ハッシュアルゴリズムにSHA-1を利用します。 |
sha-256 |
ハッシュアルゴリズムにSHA-256を利用します。 |
推奨 |
sha-384 |
ハッシュアルゴリズムにSHA-384を利用します。 |
sha-512 |
ハッシュアルゴリズムにSHA-512を利用します。 |
BCrypt |
ハッシュアルゴリズムにBCryptを利用します。(後述) |
パスワードハッシュ化設定を指定しない、もしくは上記以外の値を設定した場合にはパスワードはハッシュ化されず平文で扱われます。
互換性のため、さまざまなパスワードアルゴリズムが選択できるようになっていますが、強度の高いアルゴリズムを使うようにしてください。
Bcryptを利用する
Bcryptを利用する場合は、同時にBCryptストレッチング回数を指定します。値は 4 から 31 の範囲で、省略時は 10 となります。
重要
運用途中で、パスワードハッシュ化アルゴリズムを変更することはできません。この設定を変更してビルドすると、すでに登録されているアカウントのパスワードは変更前の方式で保存されているため、ログオンできなくなります。
アカウントロック
ログオン画面にてパスワードを連続一定回数以上まちがえるとアカウントがロックされるようになります。このパラメータを指定しない、もしくは1より小さい値を設定した場合には本機能は無効となり、パスワードを連続でまちがえてもアカウントはロックされません。この値の標準は5回となっています。
アカウントロックは「ログオン画面」と「パスワード変更画面」に適用されます。
ワンポイント
この設定を有効にした場合でもシステム管理者権限を持つユーザはアカウントロックの対象とはなりません。
注意
アカウントロック機能は「brute force攻撃(パスワード総当り攻撃)」への対策として用意されています。この機能を無効にすると、本攻撃に対するセキュリティが脆弱性な状態となってしまいますのでご注意下さい。
ロック動作の詳細
パスワード誤りが連続して行われているとき、内部ではアカウントロック値を増加させています。しかしエラーメッセージは常に "ユーザ名またはパスワードが間違っています。パスワードを連続して複数回間違えるとアカウントがロックされる場合があります。ご注意ください。" となり、いつロックされたかどうかはわからないようになっています。
この理由は、一定回数のパスワード間違いで即座にアカウントロックし、エラーメッセージを変えてしまうと、アカウントの存在そのものが攻撃者に認識されてしまうためです。そのためエラーメッセージは意図的に変えないようにしています。
例
環境タブの「アプリケーション > アカウントパスワード > アカウントロック」の値を "10" に設定したとします。
ここで10回連続、間違ったパスワードでログインしたとします。その後、11回目以降に正しいパスワードでログインできたとき、アカウントロック日時に日付が入り、そのアカウントはロックされます。
ロックの解除
パスワードを連続して複数回間違え、ログオンできない場合は次のいずれかの方法でロックを解除してください。
- パスワードリマインダー機能を使って、自身でパスワードを変更する。
- アカウント管理権限をもつ担当者(含む・システム管理者)に依頼して、当該アカウントの「アカウントロック」項目に記載されている文字列を空白にする。
いずれの場合も、このタイミングで、内部で保持しているパスワードエラー回数がリセットされます。
パスワード入力エラー数
パスワード入力を間違えた回数は、juser モデルの「パスワード入力エラー数」項目内で管理されます。ログオンが成功すると、この値はクリアされます。
一時的にアカウントを無効にする
システム管理者が、任意のアカウントの「アカウントロック」項目に何らかの値を書き込むことで、そのアカウントでログオンできないようにすることができます。
日付形式の文字列を使うことで、無効の期間を指定することもできます。書式の詳細は「有効期限(valid)の特別な書式」をお読みください。
パスワード有効日数
ユーザのパスワードに有効期限が設定されます。
パスワードの有効期限が切れたユーザはパスワードを変更するまで他の操作を行うことができなくなります。このパラメータを指定しない、もしくは0より小さい値を設定した場合には本機能は無効となり、パスワードに有効期限は存在しなくなります。この値の標準は90日となっています。
有効日数の扱いは次のようになります。
有効日数 | 説明 |
0 | パスワードは変更日の24:00 まで有効です(翌日の 0:00 には無効)。 |
1 | パスワードは変更日の1日後の24:00まで有効です。 |
2 | パスワードは変更日の2日後の24:00まで有効です。 |
... |
90 | パスワードは変更日の90日後の24:00まで有効です。 |
N | パスワードは変更日のN日後の24:00まで有効です。 |
未指定 (または"-1"など、0より小さい値) | パスワード有効期限なし。 |
パスワード有効日数を90日とした場合、次のような動作となります。
変更日 ... パスワードを変更した日
01日後
...
89日後
90日後 ... この日の24:00に有効期限が切れます。
パスワード有効日数警告
ユーザのパスワード有効期限が近づくとメニュー画面にその旨を伝えるメッセージが表示され、パスワード変更を促すことができます。この値の標準は14日となっています。
有効日数警告に「N」を指定した場合、期限切れの N 日前に警告が表示されます。
有効日数警告に「1」を指定した場合、パスワード有効日数が切れる1日前(パスワード有効日数が90日の場合、パスワード変更日の90日後の0:00)から警告が表示されるようになります。
以下の場合には本機能は無効になります。
- このパラメータを指定しない
- 0以下の値を指定した場合 (負数、および0を含む指定)
- パスワード有効日数の設定値以上の値を指定した場合
パスワード再利用制限回数
ユーザは過去に設定したパスワードを再利用できなくなります。この値の標準は1となっています。
定義方法は次のとおりです。
数値 |
説明 |
1以上 |
現在のパスワードと指定数値の「過去回数のパスワード -1」が利用できない。「1」の場合は、現在のパスワードのみチェックする。 |
0 または 未設定 または 0以下 |
チェックしない。 |
利用できる文字を制限する
パスワードの文字数の設定
モデル一覧から「システムタブ > アカウント モデル」を選択し、「新規パスワード」項目の詳細定義を開きます。
「文字数チェック」設定欄にてパスワードに入力可能な文字数が指定できます。初期設定値は「文字数 : 最小5文字、最大文字数制限なし」です。
利用できる文字の種類を制限する
「新規パスワード」項目の詳細定義から「許容文字種」に利用できる文字の種類が設定されています。
初期設定値は「許容文字種 : 数字(半角)、アルファベット大文字小文字(半角)、記号(半角)」です。
記号(半角)として利用できる文字は「入力チェック > 許容文字種 > 設定の詳細」をご確認ください。
ワンポイント
上記の設定を変更される場合は「現在のパスワード」項目及び、「新規パスワード」項目の両方に同じ設定を行ってください。
例: パスワードに1文字以上の英字・数字が混在していること
上で説明した「許容文字種」チェックにて必要最小文字数を指定することができます。
これを用いて、数字とアルファベットを1文字以上とすることで、数字のみ、英字のみのパスワードを許容しないようになります。
ユーザ定義チェックの利用は非推奨
パスワード文字列の入力ルールはユーザ定義チェックではなく、許容文字種の設定を使うことを推奨します。
パスワード項目に「ユーザ定義チェック」を適用する場合、パスワードハッシュ化設定は raw に限定されます。raw 以外を選択した場合、ハッシュ化されたパスワードとのチェックとなるため、意図しない結果となるためです。
パスワードを忘れたとき
システム管理者に依頼する
システム管理者(admin)は、一般利用者の新しいパスワードを再設定することができます。
パスワードリマインダを使う
「パスワードリマインダ」を使って、自分のパスワードを再設定することができます。(この機能を有効にする必要があります。)
juserテーブルの値を直接、編集する
パスワードは juser テーブルの passwd 項目に格納されています。SQLを使って、この値を直接、書き換えることもできます。
パスワードハッシュ化を適用していた場合、passwd 項目にはハッシュ化された文字列を格納してください。ハッシュ化文字列の作成方法は"Designerの機能・その他のツール > パスワードのハッシュ値を取得する"をお読みください。
ビルド直後の状態に初期化する
init_db.bat スクリプトを使って初期データに戻すことができます。その後、直前にエキスポートしたデータをインポートしてください。
運用中のアプリケーションの挙動を直接、変更する
ここで設定した値は、ビルド後に次のファイルに反映されます。
wagbyapp/webapps/${プロジェクト識別子}/WEB-INF/classes/application.properties
具体的には以下のエントリになります。
server.servlet.context-parameters.userinfo_failedpassword_count=5
server.servlet.context-parameters.userinfo_oldpasswd_save_size=1
server.servlet.context-parameters.userinfo_passwd_change_warn_period=14
server.servlet.context-parameters.userinfo_passwd_digest_algorithm=raw
server.servlet.context-parameters.userinfo_passwd_expire_period=90
このファイルを直接編集し、Wagbyアプリケーション(wagbyapp)を再起動することで、ビルドすることなく変更した値を適用することができます。
運用上の注意点
- この値を直接編集した場合、該当する(Designerの)設定も同時に行うようにしてください。次回ビルド時に反映されるようになります。
- パスワードハッシュ化アルゴリズム(server.context-parameters.userinfo_passwd_digest_algorithm)は、運用途中で値を変更することはできません。
[応用] パスワード強制変更の使い方
次のような業務フローを想定します。
- 利用者Aがデータを登録する。
- 利用者Bのもとに通知メールが届く。メール本文にはシステムへのURLが記載されている。
- 利用者BがURLをクリックしてシステムにログインし、内容を確認する。このとき、利用者のアカウント発行時に「次回ログオン時にパスワードを強制変更させる」を有効としているため、初回ログイン時にパスワード変更を要求する。
ここで 2.で送られるメール本文に含む "システムへのURL" は次のようにする必要があります。
http://(ホスト名)/wagby/mainMenu.do
もし URL を "wagby/showListCustomer.do" など、モデルの画面を直接開く URL を記載すると、パスワードが初期状態なので権限が制限され、画面を表示する権限がないため権限エラー画面に遷移してしまいます。
または、"セッションタイムアウト後の再ログオン時にメニュー画面を表示する" の設定を有効にするという方法もあります。
[応用] PasswordEncoderの使い方
PasswordEncoder は、パスワードを作成するクラスです。スクリプトで利用することもできます。詳細はこちらをお読みください。