mod_mrubyの認証機能について(仕様編)

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に入っているサンプルを見ると使い方がわかると思います。

Nazy の紹介

A software engineer.
カテゴリー: mruby, Programming タグ: パーマリンク