TracのOpenID認証プラグインを試す
OpenID界隈に少し賑わいが戻ってきましたか?
Bill Gates, Craig Mundie: RSA Conference 2007
自分のブログURLをIDで使える!-OpenID.ne.jp(オープンアイディー)
OpenID.ne.jpみたいなサービスって結構たくさんあります。
意味なく片っ端から登録したりして、却って訳が分からなくなってきたのでここにメモ代わりに書いておきます。
- http://ogawa.videntity.org/
- http://ogawa.pip.verisignlabs.com/
- http://getopenid.com/ogawa
- http://mylid.net/ogawa
- http://hogawa.myopenid.com/
- http://ogawa.openid.ne.jp/
すでにパスワードが分からなくなっているやつもありますが。何のためのOpenIDか、と(笑)
本来は上記のOpenID URLのいずれか一つに認証をdelegateして使うものなのでたくさん登録しても意味がありません。単に付随サービスを比較してみたかったわけです。
いやいや本題はそういうことではなくて、若葉マークのTrac野郎が(Trac野郎はじめました。 - Ogawa::Memoranda)、スパム避けにOpenID認証プラグインを試しに使ってみたという話です。
OpenidPlugin - Trac Hacks - Plugins Macros etc. - Trac
このプラグインはTrac標準のBasic認証、Digest認証の代わりにOpenID認証を利用できるようにするものです。ユーザ名の代わりにOpenID URLが使われ、認証処理自体は外部サービスによって実施されます。つまり、Tracサイトの運営者はAuthenticationを行う必要がなくなり、Authorizationのみに留意すればよくなるという大きなご利益があります。
まず必要なものを(FreeBSDなので)portsでインストールします。
# portinstall py24-openid py24-pycrypto py24-elementtree py24-setuptools
次に、流れるようにeggファイルをビルドしてTracの共通pluginsディレクトリにインストールします(easy_installを使わないのはシステムのsite-packagesを汚されるのが嫌なので)。
# svn co http://trac-hacks.org/svn/openidplugin/trunk openidplugin # cd openidplugin # python setup.py bdist_egg # cp dist/OpenIDAuth-0.1dev-py2.4.egg /usr/local/share/trac/plugins
さらにconf/trac.iniの末尾に以下の行を追加して、
[components] trac.web.auth.* = disabled openidauth.* = enabled
データベースをアップグレードして、OpenID Plugin用のスキーマをデータベースに書き込んでもらいます。
# trac-admin /var/www/projects/project1 upgrade
httpd.confはこんな感じで修正し、apachectl restart。
# Trac
<IfModule mod_python.c>
<Location /project1>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /var/www/projects
PythonOption TracUriRoot /
SetEnv PYTHON_EGG_CACHE /tmp/.egg-cache
</Location>
</IfModule>
<IfModule !mod_python.c>
<Directory /usr/local/share/trac/cgi-bin>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
<IfModule mod_fcgid.c>
ScriptAlias /project1 /usr/local/share/trac/cgi-bin/trac-project1.fcgi
</IfModule>
<IfModule !mod_fcgid.c>
ScriptAlias /project1 /usr/local/share/trac/cgi-bin/trac-project1.cgi
</IfModule>
</IfModule>
# Trac authentication
<Location "/*/login">
Require valid-user
AuthType Digest
AuthName "TracAuthRealm"
AuthUserFile /var/www/auth/trac.digest
</Location>
あとはTracページのLoginからOpenID URLを入力してログインすればよいわけです。でも本当の戦いはこれから…。
Tracのデフォルトインストールでは非ログインユーザに不必要な(スパミングに十分な)権限が与えられています。
$ trac-admin [Trac Directory] permission list
を実行すると、anonymous (非ログインユーザ)にTICKET_CREATE、TICKET_MODIFY、WIKI_CREATE、WIKI_MODIFY権限が与えられているのが分かります。まずそれを剥奪しましょう。
$ trac-admin [Trac Directory] permission remove anonymous TICKET_CREATE TICKET_MODIFY WIKI_CREATE WIKI_MODIFY
次にOpenIDによるログインユーザに適当な権限を与える必要があります。それにはauthenticatedに権限を付与すればいいのです。authenticatedはanonymousの権限を継承しているので、上で削除した分の権限を付与すればだいたい問題ありません。
$ trac-admin [Trac Directory] permission add authenticated TICKET_CREATE TICKET_MODIFY WIKI_CREATE WIKI_MODIFY
後はTRAC_ADMIN権限を自分のOpenID URLに付与しておきましょう。
$ trac-admin [Trac Directory] permission add [OpenID URL] TRAC_ADMIN
ラフな設定としてはこれでおしまい。細かいパーミッションは運用しながら調整していけばよいでしょう。
Comments and Trackbacks