たろマーク (はてなブックマーク)
-
[ javascript ][ test ] Rspec ライクな Javascript テストフレームワーク
-
[ ezpublish ] eZ のデータソースを CakePHP で使うためのアダプタ。Rails とか Django にこれを移植すれば!
-
[ iquestioner ]
-
[ ruby ]
-
[ lazy-people ] おつでしたー
■ OAuth の署名付きリクエストを受け取る
OpenSocial で gadgets.io.makeReqeust() を受け付けとるときに OAuth の署名を確認したのでメモ。具体的に言うと mixi アプリで makeRequest() を受け取るとき。
perl で OAuth の署名確認には *::Lite の人のOAuth::Liteを使った。
mixi アプリのドキュメントにある公開鍵は、OAuth::Lite::SignatureMethod::RSA_SHA1 ではそのままだと使えなかったので public key だけ取り出しました。(Crypt::OpenSSL::RSA の new_public_key にそのまま渡されてるので)
openssl x509 -in mixi_rsa.pem -pubkey -noout
取り出した pub key を使って署名の確認。下記のコードは Catalyst のコントローラにべったり書いた。
use OAuth::Lite::SignatureMethod::RSA_SHA1;
use OAuth::Lite::Util qw(create_signature_base_string);
my $public_key = <<__END_OF_PUBLIC__;
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDASPndWVBy/VYe99aVM/5PWVdS
D3Vb5uAlK4cAPz091V/1SOeL3YSRuOposPMDjf5TlQuUr/TmNE6cbAUFV0hLFQuB
69KmJN+Bt8JwptFbuFetNKaMVESntg69+VPeuvuqo2+Ob7dcTXnvNxTfdJcwga9f
W5Af9jh82kQTWmZf5QIDAQAB
-----END PUBLIC KEY-----
__END_OF_PUBLIC__
# mixi アプリは RSA_SHA1 方式
my $verifier = OAuth::Lite::SignatureMethod::RSA_SHA1->new(
consumer_secret => $public_key,
);
my $params = $c->req->params;
# oauth sigunature も渡ってくるのでこれだけ取っておく。
my $oauth_signature = $params->{oauth_signature};
delete $params->{oauth_signature};
# HTTP Method, リクエストしてきた URI, oauth_signature 以外の parameter 全部を使って base_string 生成
my $base_string = create_signature_base_string($c->req->method, $c->uri_for(), $params );
# 真なら ok
my $result = $verifier->verify($base_string, $oauth_signature);
トラックバック
このエントリーのトラックバックURL:
http://vkgtaro.jp/cgi-bin/mt/mt-tb.cgi/665





コメント
# penguin_niisan (2009年10月25日 12:35)
頂きます!
# 海賊たろ (2009年10月27日 02:04)
あいよ!