任意のディレクトリにBasic認証を設定する
想定作業時間:5分
概要
KurocoEdgeでは、Edgeの設定画面で簡単にBasic認証を設定することができます。
ただし、上記の設定では、WEBサイト全体にBasic認証が適用されます。
このチュートリアルでは、KurocoEdgeを使用して、WEBサイトの/docs/ディレクトリにのみBasic認証を設定する手順を説明します。
学べること
KurocoEdgeを使用して、WEBサイトの特定のディレクトリにBasic認証を設定する方法を学びます。
前提条件
このチュートリアルでは、HTTP Basic認証の基本的な内容について理解していることを前提とします。
ルールの設定
ルールの作成
ドラフトデプロイを選択し、追加ボタンをクリックしてルールを追加します。
全般タブ
Basic認証を/docs/サブディレクトリに適用するために、
全般タブで、URLパスのプレフィックスを/docs/に設定します。
リクエスト - 実行
次に、ルールの リクエスト タブを開き、実行 セクションを展開して、以下の設定を追加します。
| 項目 | 値 |
|---|---|
| 項目設定 | 簡易レスポンス |
| HTTP ステータス | 401 Unauthorized |
| ボディ | <html><body>Unauthorized</body></html> |
| ヘッダー | 名前:Content-Type ; 値:text/html; Charset=UTF-8 名前: WWW-Authenticate ; 値:Basic realm="KurocoEdge" |

上記の設定では、401 HTMLレスポンスにWWW-Authenticateヘッダを付けて返すことでユーザーにログイン認証情報を要求しています。
リクエスト - 条件 / 変数
次に、ユーザーが入力した認証情報を検証するための条件を追加する必要があります。
HTTP Basic認証では、認証情報はBase64を使ってエンコードされます。この例では、dGVzdDp0ZXN0(test:testをエンコードした値)のログイン認証情報を使用します。
認証情報をエンコードまたはデコードするには、https://www.base64encode.org/ を利用してください。
リクエストタブで条件/変数セクションを展開し、以下の設定を追加します。
| 項目 | 設定 |
|---|---|
| 項目設定 | ヘッダー |
| ヘッダー名 | Authorization |
| 値のパターン | Basic dGVzdDp0ZXN0 |

Basicは認証タイプがBasic認証であることを示し、dGVzdDp0ZXN0はtest:testをBase64エンコードした値です。
KurocoEdgeでは、パフォーマンス上の理由から正規表現におけるネガティブルックアヘッドをサポートしていません。そのため、条件/変数セクションで設定した条件はユーザーが入力した認証情報が有効な場合にのみTRUEを返すことになり、実行内の簡易レスポンスはユーザーが正しい認証情報を入力した場合にのみ実行されます。
そのため、この例では次のように指示フラグの設定を追加する必要があります。
リクエスト - 指示フラグ
最後に、ユーザーが入力した認証情報が一致しない場合にのみ401 HTMLレスポンスが送信されるように、条件結果を反転させる必要があります。
指示フラグセクションを展開し、条件結果を反転しますを有効にします。
上記の設定により、条件 / 変数タブに追加された条件は、認証情報が誤っている場合にTRUEとなり、401 HTMLレスポンスを返します。また、ユーザが入力した認証情報が正しい場合は、条件がFALSEとなり、401 HTMLレスポンスが返されず、結果としてユーザは/docs/サブディレクトリにアクセスできるようになります。
ルールの検証
画面左下の更新をクリックして、設定を保存します。

最後に、プレビューボタンをクリックしてルールをテストします。

/docs/サブディレクトリに移動したときに、Basic認証のログインプロンプトが表示されることを確認します。

まとめ
このチュートリアルを通して、KurocoEdgeを使用して、ウェブサイトの任意のディレクトリに対してBASIC認証を設定する方法を学びました。
同じリソースに対して複数のBasic認証チェックを行うと、ユーザの認証ヘッダが少なくとも1つの認証ヘッダで検証できないという状況が発生します。そのため、グローバルな基本認証ルール(Edgeの設定管理画面またはバックエンドで直接設定するもの)がある場合は、ディレクトリ毎のBASIC認証ルールを作成する必要はありません。
サポート
お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Discordコミュニティにご参加ください。