kur.jp

バイオリンと自転車をこよなく愛するkurのチラシの裏。たまには技術的なことを書いたりするかも知れません。

Livedoor Authを使ってみる

Livedoor Authってのは,Livedoorが提供するLivedoor IDを使ってWebサービスを構築するためのWebAPI.

Webサービスを組む時に,メンバー管理をしようと思うと,メンバーのデータをサーバで保持する必要があるので,データのCURDサイクルが必要になる.

メンバーデータの登録,変更,削除という処理は一度組んでしまえば使い回しができるものの,たとえばログイン処理をひとつとっても,ブルーフォースやディクショナリをはじめとする攻撃から,データを保護するためには,それなりのロジックが必要になるし,パスワードを忘れたという人のためにパスワード再発行機能を作る必要があったりと,かなり面倒.

そんなわけで,Livedoor Authを使うとID管理と,認証をLivedoorに任せることができるので,簡単なWebアプリを作る時などは便利である(と思う).ちなみに,同様のサービスはhatenaなども提供している. で,このAPIについて簡単に説明すると,

  1. Livedoor Authのサイトに対して,「ある引数」を渡してリンクを張る.リンクには「ログインはこちらから」とでも書いておけばいい.
  2. ユーザはこのリンクを踏むと,当然ながらLivedoor Authのサイトに飛ばされログインフォームが提示される.
  3. ログインが成功すると,あらかじめ登録したWebサイトに「ある引数」を付加されてリダイレクトされる.

といった感じになり,Webアプリ側では,ログインに成功したユーザーを一意に識別できるハッシュを得ることができる.なので,必要であれば,ユーザーごとにユーザーデータを用意すれば,自由にアプリを実装できる.

で,実際に実装してみたんだけど,この「ある引数」ってのが曲者でした. というのも,引っかかった点が2個あって,1つ目は「URLが生成された時間をエポック秒で表したもの」というもの. エポック秒なんて聞いたことがない,と思って調べてみると,こんな感じでした.

ある日時を、1970年1月1日午前0時0分0秒(世界標準時)からの秒数で表したもの

というわけで,Unix時間と同じらしいです.エポック秒なんて初めて聞いたよ.自分の不勉強っぷりを認識しました. で,もうひとつ引っかかったのが,引数のシグネイチャを生成する部分. SHA1でハッシュを生成するんだけど,SHA1関数を使ってもうまくいかない.で,ぐぐってみたらここのサイト

$sig = hash_hmac("sha1" , "app_key" . $app_key . "perms" . $perms . "t" . $t . "userdata" . $userdata . "v" . $v , "秘密鍵");

でいけるという情報を発見.で,実際にやってみるとすんなり通ったんだけど,未だに原因がよくわからない. まぁ,使えるようになったからいいです.

さてと,これを使って何を作ろうかなぁ.