Codin’ In The Free World

2010-02-19

[][] OAuth::LiteでxAuth

OAuth::Lite 1.25変更点

今までのget_access_token

my $access_token = $consumer->get_access_token(
  url => $access_token_url,
  token => $request_token,
  verifier => $verification_code,
);

tokenリクエストトークンを渡さなかったり

verifierを渡さなかったりしたら、エラーとして扱っていました。

これはOAuth 1.0 Rev a で必ず必要なパラメータだったためです。


またメソッドの返り値として得られるのはOAuth::Lite::Tokenオブジェクトでした。


しかしSession Extensionや、先日のxAuthなどでは、token以外の情報も

レスポンスに含まれるようになってきました。

また、xAuthでは、tokenやverifierなしでaccess_tokenを要求します


そんなわけで扱いづらくなってきたので, APIを変更したかったのですが、

後方互換の問題があるので、メソッド名を変えて別に用意しました。

get_access_tokenは今まで通り利用できます。

my $res = $consumer->obtain_access_token(
  url => $access_token_url,
  params => {
    x_auth_username => $username,
    x_auth_password => $password,
    x_auth_mode => "client_auth",
  }
);
  my $access_token = $res->token;
  say $access_token->token;
  say $access_token->secret;
  say $res->param('other_param');

戻り値に、ダイレクトにtokenのオブジェクトを返すのではなくて

OAuth::Lite::Responseを挟むようにしました。

$res->tokenで、OAuth::Lite::Tokenのオブジェクトが取れます。


あわせて、get_request_tokenに対してobtain_request_tokenも用意しました。

こちらも返り値がOAuth::Lite::Tokenでなく、OAuth::Lite::Responseのオブジェクトになりますが

それ以外は同じ動作をします。


twitterで実験

packageにexamples/twitter_xauth.plを足しておきました。

twitterでのxAuthを利用してみると、

access_tokenのエンドポイントは必ずhttpsのほうにアクセスすることになっています。

レスポンスを見るとxAuthで規定されているx_auth_expires以外にも

user_id, screen_nameが取れるようですね。



my $consumer = OAuth::Lite::Consumer->new(
    consumer_key    => $consumer_key,
    consumer_secret => $consumer_secret,
);

my $res = $consumer->obtain_access_token(
    url => q{https://twitter.com/oauth/access_token},
    params => {
        x_auth_username => $username,
        x_auth_password => $password,
        x_auth_mode     => "client_auth",
    },  
);

unless($res) {
    say "Failed to get access token";
    die dump($consumer->oauth_response);
}

say "[GOT ACCESS TOKEN]";
say "TOKEN:".$res->token->token;
say "TOKEN-SECRET:".$res->token->secret;
say "EXPIRES:".$res->param('x_auth_expires');
say $res->param('screen_name');
say $res->param('user_id');

特にコンシューマに対して制限なく、xAuthを利用できちゃうというところで、

ポリシーに関してはいろいろと思うところもありますが。

石田憲一石田憲一 2010/02/25 15:02 ここに何が書いてあんの。オレみたいなパーは来ちゃいけない。日本語より暗号の方が多いページ。まあ専門家のためのページだろうが、リンクをクリックしたばっかりにこんなページに来てしまった。俺が悪い。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/lyokato/20100219/1266549277