http://mixi.jp/issue_ticket.pl は OpenID server だったよ

  • リクエストのやりとりはこんな感じ
    • ログインしてcookieもらう(domain指定なしなので mixi.jp にしか渡されない)
POST /login.pl HTTP/1.1
Host: mixi.jp

HTTP/1.x 200 OK
Set-Cookie: BF_SESSION=***********; path=/
Set-Cookie: BF_STAMP=***********; path=/
GET /list_news.pl HTTP/1.1
Host: news.mixi.jp

HTTP/1.x 302 Moved
Location: http://mixi.jp/issue_ticket.pl?openid.mode=checkid_setup&openid.assoc_handle=***********&openid.return_to=http%3A%2F%2Fnews.mixi.jp%2Flist_news.pl
    • mixi.jp ドメインなので、cookie送信
    • OpenID認証がされて、IDやら署名やらが付加されて元のURLに戻される
      • openid.identity は自動で自分のプロフィールページがセットされる模様
GET /issue_ticket.pl?openid.mode=checkid_setup&openid.assoc_handle=***********&openid.return_to=http%3A%2F%2Fnews.mixi.jp%2Flist_news.pl HTTP/1.1
Host: mixi.jp
Cookie: BF_SESSION=***********; BF_STAMP=***********

HTTP/1.x 302 Moved
Location: http://news.mixi.jp/list_news.pl?openid.mode=id_res&openid.identity=http%3A%2F%2Fmixi.jp%2Fshow_friend.pl%3Fid%3D11325239&openid.return_to=http%3A%2F%2Fnews.mixi.jp%2Flist_news.pl&openid.assoc_handle=***********&openid.signed=mode%2Cidentity%2Creturn_to%2Cassoc_handle&openid.sig=***********
    • identity の正当性をチェック
    • 最後に news.mixi.jp でcookieが発行されて、このドメインは自由に見れるようになりました
GET /list_news.pl?openid.mode=id_res&openid.identity=http%3A%2F%2Fmixi.jp%2Fshow_friend.pl%3Fid%3D11325239&openid.return_to=http%3A%2F%2Fnews.mixi.jp%2Flist_news.pl&openid.assoc_handle=***********&openid.signed=mode%2Cidentity%2Creturn_to%2Cassoc_handle&openid.sig=*********** HTTP/1.1
Host: news.mixi.jp

HTTP/1.x 302 Moved
Location: http://news.mixi.jp/list_news.pl
Set-Cookie: BF_LOCAL_SESSION=***********; path=/
  • 当然、普通のOpenIDサーバとして使えないか試してみる
<html>
<head>
<link rel="openid.server" href="http://mixi.jp/issue_ticket.pl">
<link rel="openid.delegate" href="http://mixi.jp/show_friend.pl?id=11325239">
</head>
<body>
mixiopenid
</body>
</html>
    • 試してみたけど、最初のassociateで死ぬ
      • openid.assoc_handle がついてるから、smartモードで最初に鍵の交換が必要だと思うんだけれど、塞がれてるのか…
      • dumbモードでも、bad requestになりますねー
  • まとめ
    • OpenIDプロバイダとして公開希望
    • identityはshow_friend.plじゃなくて、ぱっと見でわかりやすい asannou.mixi.jp とかがいいです
    • mixiと紐付いたアカウントでいろいろログインできたら面白いよたぶん