WordPress + OpenID = wp-dareda

逆 SEO。 WordPress サイトを持つ友達から相談を受けていたのですが、検索エンジンのクローラから WordPress サイトを隠す方法を模索していました。 じゃーってことで、ログイン認証。 以前、ちょっと kohaku さんと盛り上がっていた OpenID の認証をつけてみようって話をしていて、若干ソースを書いてみていたのです。

実は、WP 上での OpenID のセッションの維持の方法をどうしていいか悩んだり、コード書いたらかいたで投稿プレビューにまでログイン画面でて笑ってしまったりの課題山積で、全然できてないわけですが(期待して見に来た方ごめんなさい)、なんとなく OpenID 自体の実装は分かったような気がします。

タイムリーなことに Rauru Blog さんをみていたら OpenID の記事が。

Rauru Blog » Blog Archive » WordPress + OpenID = ???

しかし Chris Messina らは、これを土台に DiSo — Distributed Social networking というあやしげなプロジェクトを広げようと考えてるみたいです。mixi みたいに単一業者サーバの中に囲い込む SNS じゃなくて、ユーザ1人1人が WordPress の blog 持っててそれが緩やかにつながるような形の SNS らしい。XFN とか使って。

以前(もう去年なのか!)、kohaku さんと盛り上がっていたとき、上の DiSO と同様な話をしていたので、ちょっとびっくりしてしまいました。

WordPress OpenID Plugin at orioa

WordPressのプラグインで今一番注目しているのが、OpenID Plugin

つーのも、hiromasaさんから、「この手のプラグインがあれば・・・ウヒヒヒヒ。」なんてことを聞かされて以来ずっと監視状態なわけです。
ウヒヒな場所は御想像に御任せする事にして、このOpenIDってのは面白いらしい。

実はウヒヒな内容がまさに WP の SNS 化の話で。

コアのスリム化をしようとしているWP からブログロールや XFN がプラグインに外にだされず、コア実装されているのは、matt も同様なことを考えているんじゃないかと勘ぐっていたのです。 automatic でつなげてくれる、、みたいなイメージ。 (wordpress.com だと OpenID でなんかできるんでしたっけ?)

これが実現できれば、自由にカスタマイズできる SNS システムって感じになると思いますが、結構需要はあると思います。 (仲間内だけのネットワークサイトつくりたいときありますよね)

とりあえず、WP の OpenIDログイン閲覧制御実装 "wp-dareda" (あいかわらずノリでつけられる名前)をつくろうとして、OpenID についていくつか調べていたので、書いてみます。

  • OpenID の実装実体は、OpenID プロバイダと呼ばれるログイン認証局(サイト)と、それに対応した Web アプリケーションである。
    なにかしらのアプリでログイン制御を実装したいときに、 そのアプリに OpenID API を実装しておけば、ユーザが加入しているどこかしらのログイン認証局で、パスワード認証等して OK/NG やユーザ情報を返してくれる。 アプリ自前でユーザ情報を管理する(される)必要がない。
  • OpenID ログインが実装されているアプリであれば、自分の持っているあるひとつの OpenID のユーザでそれら全てにログインできるため、インターネットで使う、ユーザ ID の一元管理ができる。(OpenID の主目的の一つ、インターネット上でのシングルサインオン) ちなみに、Microsoft Passport も考え方は似たようなもの。
  • 日本だと、openid.ne.jpはてなlivedoor 等で OpenID プロバイダのサービスをしている。 他にもあるかも。 はてな、livedoor はいま持っている、サイト ID を流用して OpenID が発行できる。
  • ユーザがつかうアプリに入力する ユーザID は、OpenID ログイン認証局から発行される URL 形式である。 たとえば、ぼくのはてなの OpenID は、http://www.hatena.ne.jp/h1romas4/ である。ユーザ IDに ドメインを含む URL 形式をつかっているため、インターネット上で一意なユーザ IDとなる。
  • OpenID API の実装されたアプリは、この URL を元にログイン認証局に問い合わせを行う。 画面がいったん OpenID プロバイダサイトに遷移してログイン画面がでる。 終わったらアプリの画面に戻る。
    ログイン認証局では、パスワード入力や、問い合わせのあったアプリへ情報を送って良いかどうかの制御を行う。 また、各アプリへの情報送信の制御を管理する画面がある。
  • アプリからログイン依頼をうけたログイン認証局は、アプリにログイン情報を送信する。 一番基本的なのが、パスワード等でその人と認証できたかどうか。 他にも OpenID プロバイダに登録してあるユーザ情報(ニックネームとかメールアドレスとか)も送信"できる"。 はてな、live はいまのところ認証可否だけしか送らない(れない)様子。
  • OpenID 認証を他に委託する、delegate が使える。
    たとえば、このサーバのURL https://another.maple4ever.net/ に delegate を設定して、本当の認証局(はてな)に委託するようにすれば、OpenID のユーザ ID として、https://another.maple4ever.net/ が使える。
    つまり、自分でとったドメインを OpenID として設定しておけば、そのときつかっている OpenID プロバイダがつぶれようとも、委託先をかえるだけで、OpenID の ユーザID 自体を変更せずに運用できる。
    delegate の設定方法は自分で決めた ユーザID URL の返す HTML に決められた meta タグで委託先の本当の ユーザID URL を書いておくだけ。 リダイレクトされるんね。
  • PHP での OpenID ライブラリは、php-openid というのがある。 wp-openid でもこのライブラリが使われている。 ちなみに結構でかい。 あと、クライアントだけでなく認証局のサーバにもなれるようだ。(ためしてはいない)
    開発時に 2.0 系をWinodws で動かすときは、define(‘Auth_OpenID_RAND_SOURCE’, null); しましょう。 しないと動かないです。(標準はUNIX の乱数生成機使っている)

ってな感じだと思います。 どこか間違ってたらごめんなさい。 技術単語は思いつきで書いているので、オフィシャルとは違うかもです。

WP に実装しようとしてくれるグループが現れたので、ぼくがしょぼい実装する必要もないですね。。(笑) でも、面白そうではあるので勉強がてらちょろちょとみてみることにします。

WordPress + OpenID = wp-dareda」への4件のフィードバック

  1. MovableTypeは対応したとか言ってるので、WordPressも何とかなるといいなあなんて考えてます。単にコメントの認証だけじゃなくて、記事の公開範囲もmixiの認証使ってマイミクさんとかコミュニティ参加者に限定とかできるといいななどと夢を見ています(笑)。

  2. そうですね! OpenID でその実装をし始めているグループがどうやらあるようです。(ちょっとプロジェクト名失念。。

    RSS が認証できないとか、いろいろ課題はあるとおもうのですが、SNS 的なブログも面白そうですね。 🙂

コメントを残す