コンテンツにスキップ

ページにベーシック認証をかける

mkdocsのページに認証機能を追加する方法はいくつか考えられます。

  1. netlifyVercelなどのホスティングサービスの機能を使う
  2. djangoflaskなどのwebフレームワークにmkdocsを組み込み、認証機能を追加する
  3. mkdocsのプラグインを使う

ホスティングサービスの機能を使う方法は、ホスティングサービスによっては有料プランが必要になることがあります。また、フレームワークにmkdocsを組み込む方法は、mkdocsの更新に追従するために手間がかかることがあります。

筆者はとにかく手軽にマークダウンを書くだけでいいということでmkdocsを使っているので、プラグインを使う方法を選択しました。

mkdocsのプラグインを使う

色々調べた結果、mkdocs-encryptcontent-pluginというプラグインでベーシック認証をかけることができることがわかりました。

mkdocs-encryptcontent-pluginのインストール

まずは、mkdocs-encryptcontent-pluginをインストールします。

bash
1
pip install mkdocs-encryptcontent-plugin==3.0.3

mkdocs.ymlの設定

mkdocs-encryptcontent-pluginは、mkdocs.ymlに設定を追加することでベーシック認証をかけることができます。
基本的な設定を以下に示します。

mkdocs.yml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
plugins:
  - search:
  - encryptcontent:
      title_prefix: '[ロック]'  # ロックされたページタイトルに付与するプレフィックス
      summary: '暗号化されたコンテンツ'  # ロックされたページのサマリ(タイトルが置き換わります)
      placeholder: 'パスワードを入力してください。'  # パスワード入力欄のプレースホルダ
      decryption_failure_message: 'パスワードが違います。'  # パスワードが違う場合のメッセージ
      encryption_info_message: "このページを閲覧するにはパスワードが必要です。"  # ロックされたページのメッセージ
      password_button: True  # パスワード入力欄の右側に解除ボタンを表示するか
      password_button_text: '解除'  # 解除ボタンのテキスト
      password_inventory:  # パスワードレベルごとのパスワードを設定
        classified: 'password1'  # classifiedレベルのページにはpassword1を設定
        confidential:  # confidentialレベルのページにはpassword2, password3の2つのパスワードを設定
          - 'password2'
          - 'password3'
        secret:  # secretレベルのページ
          user4: 'password4'  # ユーザ名とパスワードを設定(ユーザ名: user4, パスワード: password4で解除)
          user5: 'password5'  # ユーザ名とパスワードを設定(ユーザ名: user5, パスワード: password5で解除)

ページにベーシック認証をかける

ベーシック認証をかけたいページには、以下のように設定します。

docs/mkdocs/page-besic-auth.md
1
2
3
4
5
6
7
8
---
title: "ベーシック認証をかけるページ"
level: secret  # ページのレベルを設定
---

# ベーシック認証をかけるページ

このページはベーシック認証をかけています。

levelには、mkdocs.ymlで設定したpassword_inventoryのキーを指定します。

まとめ

mkdocs-encryptcontent-pluginを使うことで、簡単にmkdocsのページにベーシック認証をかけることができます。
他にも、認証情報を外部ファイルに保存する方法や、認証情報を環境変数に保存する方法もあるので、必要に応じて調べてみてください。

mkdocs-encryptcontent-plugin

コメント