こんにちは woremacx です!
OpenID さえあれば MTOS に Author アカウントでエントリできるようにする hack をしましたのでかんたんに紹介します。
みなさん MTOS つかってますか? MTOS は、Perl言語で作られている Movable Type のオープンソース版で、GNU GPL で使える cool なプロダクトです! GNU GPL のもとで使えるのですから、お仕事にでもお遊びにでも積極的に使いたいですね! この perl-mongers.org にも早速インストールしました。
そんな、ぼくお気に入りの MTOS に、OpenID でログインするだけで Author アカウントを作成しエントリできるようにする hack をしました。アイディアは、kazeburo さんの LIMILIC そのものです。tomyhero さんのセクシーObjective-C - sxey objective-c ブログ というサイトでは、LIMILIC で共有ブログを実現しています。
実現方法について説明します。今回は、従来の username / password による認証を機能させつつ、OpenID でログインしてきたユーザに最小限の権限を付すことにしました。
OpenID 部分は、コメントの外部認証に使われている MT::Auth::OpenID をコピペして MT::Auth::MTOpenID というモジュールを作りました。
MT::Auth::MTOpenID では、
- Net::OpenID::Consumer をつかって OpenID 周りの処理
- blog_id のバリデーション
- type が MT::Author::AUTHOR() の author を追加
- あらかじめ指定してある role 名からの permission, association を追加
というようなことをやっています。
それをふまえて、コア (MT::App) の login メソッドを少し触りました。OpenID での認証時には MT::Auth のメソッドを使わずに、新規にログインがあったかのように振る舞っています。
使い方は、
- パッチをあてる
- mt-config.cgi に必要な設定を書く
- コメントの認証設定で OpenID を使わないように変更する
という感じです。
mt-config.cgi の書き方は、
# OpenID で記事を書けるようにするブログの ID の Regexp AllowOpenIDUserBlog 1 # OpenID でログインしてきたユーザに付す Role OpenIDUserRole Author # デフォルトのメールアドレス OpenIDUserEmail dummy-addr@example.com
となっており、全て設定する必要があります。
以下が MT-4.15b5 からの変更点をまとめたパッチです。
ざっと説明してきた今回の hack ですが、こうやったら攻撃できるんじゃないかとか、脆弱性があるとか、そういうポイントがあれば是非ご指摘いただけたらうれしいです!よろしくお願いします!
ということで OpenID があればこのブログに書けるよ!
みんなブログ書いて Perl を盛り上げていこう!



MTOS4.21でやってみると、エラーでます。
MT-4.15b5から仕様変更しているのかな?
Got an error: Missing right curly or square bracket at lib/MT/App.pm line 3574, at end of line
syntax error at lib/MT/App.pm line 3574, at EOF
Compilation failed in require at (eval 4) line 3.
...propagated at /usr/lib/perl5/5.8.5/base.pm line 85.
BEGIN failed--compilation aborted at lib/MT/App/CMS.pm line 10.
Compilation failed in require at lib/MT/Bootstrap.pm line 62.