matsumoto-rさんのmod_mrubyに認証機能を実装したのでその外部仕様を中心に紹介します。
matsumoto-rさんにはすぐにマージいただいて多謝です。
この記事+サンプルを読めば一通りの認証機能が使えるようになると思います。
今回は仕様編で、応用編、内部実装解説と続く予定です。
mod_mrubyの認証機能でできること
- Basic認証とDigest認証をmrubyで処理できます
- (認証機能としては普通ですが)ディレクティブごとに、mrubyスクリプトを切り替えられます
Apacheの定義の方法
mod_mrubyで認証を行うにはApacheに以下の定義を書きます。
これを1つ1つ解説していきます。
Basic認証を使う場合
# 認証の設定は、, または上書きが許可されていれば.htaccessの中で宣言できます。 # ここでは、 として解説します。 <Location /basic/> # Basic認証をする宣言 AuthType basic # Basic認証の場合は、認証ダイアログに表示する文字。中身は任意。 AuthName "Message for clients" # mrubyで認証するという宣言 (Digest認証と同じ) AuthBasicProvider mruby # Basic認証スクリプトへのパス。実際のスクリプトを置いたパスに変更すること。 mrubyAuthnCheckPassword /path/to/authn_basic.rb # 認可の設定。ここは任意 # 例として、有効なユーザであればリソースへのアクセスを認可する require valid-user </Location>
Digest認証を使う場合
Digest認証をする場合は、以下を記載します。
<Location /digest/> # Digest認証をする宣言 AuthType digest # Digest認証の場合は、指定した文字列がrealmになるので重要です。 # ここでは例としてhobbitというrealmにします。これは。 AuthName "hobbit" # mrubyで認証するという宣言 (Basic認証と同じ) AuthBasicProvider mruby # Digest認証スクリプトへのパス。実際のスクリプトを置いたパスに変更すること。 mrubyAuthnGetRealmHash /path/to/authn_digest.rb # 認可の設定。ここは任意 # 例として、有効なユーザであればリソースへのアクセスを認可する require valid-user </Location>
認証クラスApache::AuthnProviderの解説
今回、認証用に実装したApache::AuthnProviderを解説します。
要約
認証情報を取得および格納するオブジェクトのクラス。
Apache::AuthnProvider.newをつかって生成します。
特異メソッド
- new -> AuthnProvider
- 認証に必要な情報が格納されたAuthnProviderオブジェクトを返します
インスタンスメソッド
- password -> String | nil
- Basic認証の場合、平文のパスワードを返します。
Digest認証の場合、nilを返します。 - realm -> String
- Basic認証の場合、nilを返します。
Digest認証の場合、ApacheのconfでAuthNameに設定した文字列を返します。 - rethash -> String | nil
- rethashに設定された文字列を返します。初期値はnilです
- rethash=(value)
-
rethash値をvalueに変更します。
Basic認証の場合、設定してもエラーにはなりませんが無意味です。
Digest認証の場合、realmの中にいるユーザに対応するパスワードのハッシュ値を指定します。
[PARAM] value:
[Digest認証] パスワードをハッシュ化したもの与えます。この値を元にApacheのDigest認証機構がパスワードの同一性を確認して認証します。
ハッシュアルゴリズムはApacheのAuthDigestAlgorithm定義しますが、現状実質的にMD5のみです。
文字列は、以下のように生成します。
Digest::MD5.hexdigest([user, realm, password].join(“:”))
Digestを使うにはiij/mrubyなどを使用する必要があります。 - user -> String
- 認証するユーザ名を文字列で返します。
定数
- AUTH_DENIED -> Fixnum
- Basic認証で認証が失敗したことを示します。
値は、Apache::returnに渡します。 - AUTH_GRANTED -> Fixnum
- Basic認証で認証が成功したことを示します。
値は、Apache::returnに渡します。 - AUTH_USER_FOUND -> Fixnum
- Digest認証で適切なユーザが見つからなかったことを示します。
値は、Apache::returnに渡します。 - AUTH_USER_NOT_FOUND -> Fixnum
- Digest認証で適切なユーザが見つからなかったことを示します。
値は、Apache::returnに渡します。
使い方
matsumoto-rさんが書かれたblogの記事や、exampleに入っているサンプルを見ると使い方がわかると思います。