OpenID の拡張領域を使ってアクセストークンを発行
アイデンティティ飲み会でも少しお話させてもらった話。
SCIS2008 の(なぜか)匿名認証技術のセッションで発表したので、 DIS 覚悟で資料を晒してみる。 やっていることを一言で言えば、 OpenID の拡張領域を使って OAuth のようなトークンを発行するということ。 もともと、 Flickr API や Google AuthSub が独自方式でトークンを発行していたので、 OpenID をベースにやっちゃえば楽なんじゃないの?と思ったのが去年の6〜7月ごろ。 その後、9月に paper を書き終えたタイミングで OAuth が出てきたりして(だから OAuth を調べたのも早かった)あらら…って感じだったんだけど、せっかくなので OAuth と比較することにした。
OAuth を一から実装するより、 OpenID の拡張の方が簡単にできるよ、という話。 ruby-openid-2.0.0 と Rails 2.0.1 を使って実装している。
ちょっとこじつけかもしれないけど、 OAuth が必要になるくらいのサービスだと、はてなや livedoor や Yahoo! みたいに自分でユーザ情報を管理している。 OpenID を使ってユーザ情報は外部で管理…にはならない。 だったら自分が OpenID の OP になるとともに、そのまま自社サービスの WebAPI で使えるトークンを発行してもいいんじゃないと思うようになってきた。
OAuth の利点は認証と認可を明確に分けていること(っていうか OAuth のいきさつを読んだら最初は OpenID の拡張を使うことを検討したらしい)だけど、その反面で実装が重複しているところもある。 だから、一つの案としてこういうのもいいんじゃないかな。
そういえば、作ってしまったあとに気がついたけど、 OpenID の属性交換 (Attribute Exchange, AX) を使ってもいいかもと思った。 トークンは動的に値が変わる属性だけど、 AX って動的な属性でも大丈夫なのかな。