Feb 17, 2007

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野郎が(Ogawa::Buzz: Trac野郎はじめました。)、スパム避けに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
Fedora Core 6だと「yum install python-openid python-crypto python-elementtree python-setuptools python-sqlite2」とかやって必要なものを全部入れることになります。嫌なのは、yumもtracもpython-sqliteに依存しているのに、OpenID PluginやTurboGearsはpython-sqlite2に依存している点。しかも、両方インストールしてあるとmod_pythonが死んだりするので黙ってmod_fcgidを使うしかありません。ムッキーッ!!という感じ。できる子はみんな自分でPythonを/usr/localにインストールして使っているのでしょう。そういうわけで以下はFreeBSDを前提に説明します。

次に、流れるように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

ラフな設定としてはこれでおしまい。細かいパーミッションは運用しながら調整していけばよいでしょう。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com