海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
えー、社内 web みたいなところに、なんか勝手に・自由に Wiki でも立てましょうというケース。 Hiki を使って、edit_user なんかがとても便利なんだが、 こう、アカウント・パスワード情報があちこちに増え続けるのが、ちょっと堪らない。
そこで、LDAP サーバに認証をまかせてしまおう!おー、それがいい。
まず、${Hiki のインストールディレクトリ}/hiki/ldapauth.rb とかいう名前で、 次のようなファイルを置く。
require 'ldap' def auth_ldap(uid, pass) conn = LDAP::Conn.new("127.0.0.1", LDAP::LDAP_PORT) # これは、LDAP サーバが localhost な場合。 conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION,3) dn="uid=#{uid},ou=People,dc=hoge,dc=fuga,dc=honya" # dn は適切に、ね。 begin conn.simple_bind(dn, pass) true rescue LDAP::ResultError false end end
でもって、さらに、${Hiki のインストールディレクトリ}/hiki/plugin.rb にちょいと小細工を施す。
最初らへん:
# $Id: plugin.rb,v 1.36 2006/09/02 06:36:57 znz Exp $ # Copyright (C) 2002-2003 TAKEUCHI Hitoshi <hitoshi@namaraii.com> # Copyright (C) 2004-2005 Kazuhiko <kazuhiko@fdiary.net> # # TADA Tadashi <sho@spc.gr.jp> holds the copyright of Config class. require 'cgi' require 'uri' require 'hiki/util' require 'hiki/ldapauth' # ←ここ
なかほど:
def login( name, password ) return if @user return nil unless password name ||= @conf.admin_name if @conf.password.empty? || password.crypt( @conf.password ) == @conf.password && name == @conf.admin_name @user = @conf.admin_name elsif @conf['user.list'] if auth_ldap(name, password) # ここ @user = name end end end
実際、plugin.rb を書き換えたのは二行だけである。
% diff plugin.rb.bk plugin.rb [~/html/h/hiki] 9a10 > require 'hiki/ldapauth' 309c310 < if @conf['user.list'].has_key?(name) && @conf['user.list'][name] == password.crypt(@conf['user.list'][name]) --- > if auth_ldap(name, password)
これで、LDAP サーバに認証を丸なげできる。elsif @conf['user.list'] とか、 そのまま残してあるので、edit_user プラグインはちゃんと有効にして、 ユーザリストに適当なユーザ名を書いておく必要がある。
動作確認は、Hiki 0.8.7 (2007-06-24) で行った。 また、ruby-ldap-0.9.7 を使用してます。
初めまして<br>この日記を参考にhikiのLDAP認証プラグインを作ってみました。<br>http://sourceforge.jp/projects/hiki-auth-ldap/<br>事後報告となってしまいすいません。
うわぁ、びっくり。<br># 普段、ひとに読まれるのを意識しているよう、いないような感じなので。<br><br>わざわざ御報告いただいて、ありがとうございます。