StaffAuth
概要
StaffAuth は、スタッフのアカウントを保護します。スタッフ権限(デフォルトは security.admin)を持つプレイヤーが参加すると、認証するまで凍結されます。移動、インタラクト、ブロックの破壊や設置、インベントリを開く、チャット、戦闘、/staffauth 以外のコマンドの使用ができません。パスワードを持たないスタッフは、初回参加時にパスワードを登録し、それ以降はそのパスワードでログインします。
パスワードは、コマンドの引数として送られることも、チャットに入力されることもありません。Paper のダイアログ入力、または任意の数字キーパッドメニューで入力され、TypeWriter のアーティファクトに、BCrypt のハッシュとしてのみ保存されます。失敗した試行はレート制限され、クールダウンが段階的に延び、プレイヤーをキックすることもできます。
全員が、参加時に権限が読み込まれる間、およそ 1 ティックの間、通知なしで保留されるため、権限のバックエンドが遅くても、確認なしにスタッフが入り込むことはありません。その後、スタッフではないプレイヤーは解放されます。10 秒以内に権限が確立されない場合、プレイヤーは理由の説明とともにキックされます。
機能
- 参加時の凍結 — 認証されていないスタッフは、移動、インタラクト、建築、ドロップ、拾得、消費、釣り、ダメージの受け渡し、チャット、コマンドの実行ができません。
- 登録とログイン — 初めてのスタッフは、パスワードを 2 回入力して登録し、それ以降の人はログインします。
- ハッシュ化された保存 — BCrypt のハッシュだけが保存され、コストファクターは設定できます。
- 試行回数の制限 — 失敗のたびに倍増するクールダウン(最大 60 秒)と、
maxAttempts回の失敗後のキック。 - セッションのタイムアウト — 任意で、認証済みのスタッフを、指定した分数の後にログイン画面に戻します。
- ダイアログまたはキーパッド — デフォルトは Paper のダイアログ入力で、GUI レイアウトから作る、任意の数字キーパッドメニューもあります。
- 管理者用ツール — 保存されたパスワードのリセット、または強制ログアウト。
- 任意の Permissions 拡張機能 — 誰がスタッフかを決める前に、権限の読み込みを待ちます。
インストール
- GUI 拡張機能をインストールします。ログインダイアログとキーパッドメニューは、それを通じて開かれます。ない場合、
/staffauthはインターフェースが利用できないと応答します。 - サーバーがデータベースから権限を読み込む場合は、任意で BTC の Permissions 拡張機能をインストールします。StaffAuth は、自動的にそれを検出します。
- StaffAuth の JAR を
plugins/Typewriter/extensions/に置き、サーバーを再起動します。 - 認証が必要なアカウントに、スタッフ権限(
security.admin)を付与します。
はじめに
- TypeWriter の Web パネルで static ページを開き、Staff Auth Passwords アーティファクトを追加します。その後で
artifactIdを変更しないでください。保存されたパスワードが失われます。 - 同じページに、Staff Auth Config エントリを 1 つ追加します。
staffPermission、adminPermission、maxAttempts、minPasswordLength、bcryptCost、メッセージを確認します。 - パブリッシュします。StaffAuth には、両方のエントリが必要です。config がないと何もせず、アーティファクトがないと、スタッフは通過してしまいます(エラーがログに記録されます)。
- スタッフ権限を持つテスト用アカウントで参加します。凍結され、登録を求められます。ダイアログにパスワードを入力し、その後、確認のために再入力します。
- 再接続します。ダイアログが、今度はパスワードを尋ねます。
- 任意: キーパッドを使うには、Staff Auth Menu アクションを追加します。下記を参照してください。
StaffAuth は、最初に見つかった Staff Auth Config と Staff Auth Passwords アーティファクトを使います。複数作成しないでください。
仕組み
認証は、プレイヤーがサーバーを離れる(状態はメモリ上にのみ保持されます)か、任意のセッションタイムアウトが切れるまで続きます。制限中に許可されるコマンドは /staffauth だけです(/sa もブロックの対象外になっていますが、エイリアスとしては登録されていません)。
メニュー
参加時、/staffauth、login、register は、テキスト入力のある Paper のダイアログを開きます。登録時には、パスワードを確認するため、ダイアログが 2 回目に表示されます。プロンプトのテキストは guiLoginPrompt、タイトルは guiTitle から取得されます。
Staff Auth Menu アクションは、代わりに、インベントリのキーパッド(数字のみ)を開きます。この見た目を好む場合は、アクションチェーンからトリガーしてください。その layoutPool で、アイテムにボタンタイプを設定すると、キーになります。
| ボタンタイプ | 機能 |
|---|---|
DIGIT_0 から DIGIT_9 | パスワードに数字を 1 つ追加します。 |
PASSWORD_DISPLAY | 入力した数字ごとに、ドットを 1 つ表示します。 |
LOGIN / REGISTER | パスワードを送信します。プレイヤーがまだパスワードを持っていない場合、ラベルは Register になります。 |
BACKSPACE | 最後の数字を削除します。 |
CANCEL | 入力を消去して、メニューを閉じます。 |
キーパッドで入力できるのは数字だけで、パスワードは minPasswordLength を満たす必要があります。useGuiWhenAvailable は、参加時に自動的にダイアログを開くかどうかを制御します。
設定
すべてはエントリで設定します。メッセージのフィールドでは、プレースホルダーとして {attempts}、{max}、{length}(波括弧で、MiniMessage のタグではありません)を使います。wrongPasswordMessage では {attempts} と {max}、maxAttemptsKickMessage では {attempts}、passwordTooShortMessage では {length}(最小値)と {max} です。
パスワードは、artifactId で選んだアーティファクトのファイルに、プレイヤーの UUID から BCrypt ハッシュへの JSON マップとして保存されます。アーティファクトは、5 秒間キャッシュされます。
コマンド
コマンド名は、config の commandName フィールド(デフォルトは staffauth)から決まります。基本コマンドには、登録された権限がありません。誰でも実行できますが、効果があるのはスタッフだけです。管理者用のサブコマンドには、adminPermission に設定した権限が必要です。
| コマンド | 説明 |
|---|---|
/staffauth | ログインまたは登録のダイアログを開きます。 |
/staffauth open、login、register | 上記と同じです。 |
/staffauth logout | 自分の認証を終了し、再びダイアログを表示します。 |
/staffauth status | 自分の状態、スタッフ権限を持っているか、GUI が利用できるかを表示します。 |
/staffauth reset <player> | プレイヤー(名前または UUID)の保存されたパスワードを削除します。そのプレイヤーは、再登録が必要です。adminPermission が必要です。 |
/staffauth force-logout <player> | オンラインのプレイヤーをログアウトさせ、ダイアログを表示します。adminPermission が必要です。 |
権限
権限は、固定のノードではなく、設定可能なフィールドです。
| 権限 | 許可される内容 |
|---|---|
security.admin(staffPermission) | プレイヤーをスタッフとして印付けします。認証が必要になります。 |
security.staffauth.admin(adminPermission) | /staffauth reset と /staffauth force-logout。 |
エントリ
3 件のエントリー(拡張機能のソースから生成)。
アクション1
- Staff Auth MenuStaff Auth Menu
コマンド1
- Staff Auth ConfigStaff Auth Config
アーティファクト1
- Staff Auth DataStaff Auth Passwords
トラブルシューティング
スタッフがパスワードを求められずに入ってくる。 config とアーティファクトの両方がパブリッシュされていることを確認してください。アーティファクトがないと、StaffAuth はスタッフを通し、StaffAuth has no artifact entry とログに記録します。また、プレイヤーが実際に staffPermission を持っているかも確認してください(/staffauth status で表示されます)。
プレイヤーが、権限に関するメッセージとともにキックされる。 Permissions 拡張機能が、10 秒以内にプレイヤーの権限が読み込まれたことを通知しませんでした。再接続してください。解消しない場合は、ログで Permissions のバックエンドを確認してください。
The StaffAuth interface is unavailable. と表示される。 GUI 拡張機能が読み込まれていません。インストールして再起動してください。
パスワードが消えた。 アーティファクトの artifactId が変更されたか、エントリが再作成されました。以前の ID に戻してください。保存された値が、有効な UUID や BCrypt の文字列でない場合、読み込みが失敗し、StaffAuth artifact could not be loaded とログに記録されます。プレイヤーは凍結されたままで、状態が読み取れないと通知されます。
登録が拒否される。 パスワードは、minPasswordLength(6)から maxPasswordLength(128)文字の間で、スペースや制御文字を含んではいけません。2 回の入力が一致する必要があります。
ログインに失敗した後に、プレイヤーがキックされる。 maxAttempts(デフォルトは 5)回の失敗の後、プレイヤーは maxAttemptsKickMessage とともにキックされます。キックを無効にするには、maxAttempts を 0 にします。クールダウンは引き続き適用されます。/staffauth reset <player> で、忘れたパスワードを消去できます。
関連する拡張機能
- GUI — ログインダイアログとキーパッドメニューを開きます。