はてなの認証 API が公開されていたので、早速テストしてみました。
ヘルプの通りで特に問題はありませんでした。
まず、入口となるページではてなへのリンクを貼ります。MD5 を計算する必要がありますが、 例えば ruby を使って以下のような感じで求められます。
% ruby -rdigest/md5 'p Digest::MD5.hexdigest("abcde01234abcde0" + "api_key" + "faff512ffa3a23c85efaaa4bf92f5839")'
コールバック URL には http://shakenbu.org/yanagi/hatena-auth/hatena-auth.cgi を指定します。 その hatena-auth.cgi の中身は下のような感じです。
#!/usr/local/bin/ruby require 'cgi' require 'open-uri' require 'digest/md5' cgi = CGI.new api_key = 'faff512ffa3a23c85efaaa4bf92f5839' private_key = 'abcde01234abcde0' # 秘密鍵 cert = cgi.params['cert'] api_sig = Digest::MD5.hexdigest("#{private_key}api_key#{api_key}cert#{cert}") uri = "http://auth.hatena.ne.jp/api/auth.json?api_key=#{api_key}&cert=#{cert}&api_sig=#{api_sig}" open(uri) do |f| print "Content-Type: text/plain\n\n" puts f.read end
秘密鍵のところは実際の値とは変えてあります。
ここでは単にレスポンスの中身を出力するだけにしてありますが、 実際のアプリケーションではこのレスポンスに従って処理を分ける形になります。
Ruby の JSON ライブラリは使ったことないですが、http://json.rubyforge.org/ が見つかりました。
http://auth.hatena.ne.jp/auth の呼び出しですが、クエリの区切りはちゃんと ; にも対応していました。
結城さんもテストページを作られていました。http://d.hatena.ne.jp/hyuki/20060424#hatenaapi
Ruby 版のモジュールも出てきました。 http://subtech.g.hatena.ne.jp/secondlife/20060424/1145882341
はてな認証 API をテストしてみての疑問。この手の認証 API を使ったことがないのですが、ログアウトってどうやるんでしょうか?
ログイン時の認証ははてなにしてもらって、ログインが成功していたら こちらのアプリでセッションを保持するわけですよね。
この場合、ログアウト処理ででこちらのアプリのセッションを消しても、 はてなにはログインしたままになってるので、はてなのログアウトもしないと いけないと思うのですが、どうすればいいのかなぁと。
一応 http://www.hatena.ne.jp/logout にリダイレクトすればはてなもログアウトできますけど、そのあとはてなのトップページに行ってしまいますよね。
逆に、はてなのほうでログアウトしたらどうなるんでしょう。いったんもらったcertがもう使えなくなる?…といってもcertはもともと一回しか使えないですよね。ということで、はてな側をログアウトするかしないかはサードパーティ側では考慮しなくてよいのではないでしょうか。単にその瞬間、そのセッションが正式なはてなユーザであることを示してもらったというサービスだと考えるのでは?(違っていたらごめんなさい)
確かに、おっしゃられるとおりに、はてな API から見てサードパーティのひとつであるこちら側で<br>はてなのログアウトのことまで考える必要はない、というのが答えなんだろうと思います。<br><br>ただ、それでもちょっとひっかかりが残っていて、それがどこに由来するのかを考えてみると、<br>サードパーティ側でははてなのアカウントが有効であるかどうかを知りたいだけなのに、<br>強制的にはてなにログインしてしまうのがひっかかりの元なのかなぁと思いました。<br>うーん、何か勘違いしてるかな……