OAuth タグのついた記事一覧
entries tagged with OAuth
もう2週間以上前ですが、idcon #7でtwitter独自のOAuth拡張について話してきました。
1つはOAuth Echo。iPhoneアプリからtwitpicやposterousなど経由でtwitterにpostする場合など、3サービス以上が連携する場合に使えるように設計されたOAuth拡張です。
2つめはOAuth for OpenSource(仮称)。まだ正式名称も発表されていませんが、consumer key&secretをソースコードと一緒に配布しなければならないという問題に取り組もうとしている拡張です。
詳しくはスライドを。
先週金曜日、日本での iPad 発売日に、NRI であった OpenID TechNight Vol.6 で、OpenID & OAuth に関するプレゼンをいくつかしてきました。
このイベントでは、「OpenID & OAuth 仕様書を日本語に翻訳しました」で紹介した OpenID Foundation Japan の翻訳・教育ワーキンググループのメンバーが中心になって、いままで翻訳した各仕様を中心に、その概要や活用事例などを紹介しました。
OpenID / OAuth をエンドユーザとしてだけ使っていた方に、自分が作ってるサービスでも OpenID / OAuth を活用してみようと思っていただけていたら、イベントの狙いとしては成功かなと思います。既に OpenID / OAuth についてある程度の知識があるかたには簡単すぎる内容だったかもしれませんが、そういう方は「Identify Conference #7」に行くと良いかと。
TechNight #6 のスライドは「"openid technight" on SlideShare」でいくつか確認できますし、数日中には OpenID Foundation Japan のサイトで確認できるようになるかと思います。
あ、そういえばスライドを英語にするとかいう話があった気がする。
Google I/O 2010 で Google Buzz API が正式に発表されたと聞いて Buzz の API ドキュメントを眺めてたら、なにやら見慣れぬ oacurl ツールが使われているではないですか。(OACurl Cookbook)
どうもこの oacurl、OAuth 対応の curl っぽいコマンドラインツールらしい。ということで、Buzz API はスルーして oacurl を触ってみることにしました。
oacurl のインストール
oacurl、OACurl Cookbook でそれぞれ別のインストール方法が紹介されているので、どちらでも好きな方を選択します。以降は oacurl 本家サイトの方法でインストールしているという前提で話を進めます。
Twitter OAuth Consumer の設定
まずは Consumer 登録。
なぜか callback_url=oob の場合 oacurl が java.lang.NullPointerException でエラーになるので、ここでは Application Type を Client ではなく Browser にしてください。oacurl はコマンドラインツールですが、callback_url=http://localhost:XXXX として callback を受け取ることもできます。
その後 Twitter 用のプロパティファイルを作成します。(~/.oacurl.twitter.properties)
requestTokenUrl=http://twitter.com/oauth/request_token
userAuthorizationUrl=http://twitter.com/oauth/authorize
accessTokenUrl=http://twitter.com/oauth/access_token
Read more
昨年末にOpenIDファウンデーション・ジャパン参加企業の有志数名で翻訳・教育 Working Groupというのを立ち上げて、現在は主にドキュメントの翻訳を行っています。
現在4本のドキュメントの日本語版を翻訳・教育 Working Group のサイトで公開しています。(この記事の末尾にリンクあり)
翻訳後のドキュメント以外に、githubレポジトリも公開しています。forkもpull requestも大歓迎!原文との比較がしやすいように、各翻訳版のXMLファイルにはコメントアウトの形で原文も残されています。
翻訳版ドキュメントへのコメント・質問は翻訳・教育 Working Group のサイトのコメント欄にどうぞ。

OAuth WRAP という新しい OAuth の仕様が話題になってるので、ちょっとドキュメントを訳してみました。
全部翻訳するのは大変なので、利用シーンごとに分けて作られている "Profile" というのだけをそれぞれ訳しています。(WRAP は Web Resource Authorization Protocol の略らしい)
Facebook Connect を置き換えるものとしても注目されており、Javascript 単体のアプリケーションなんかも想定してあります。今回翻訳したドキュメントでは、まだ Javascript Profile は定義されていないのですが、MLに仕様書のドラフトが添付されていたので、そちらも同時に訳しています。
Smart.fm でも Javascript アプリ上での認証はオープン化の key なので、特に Javascript Profile に注目しています。
Read more
Contact リストを Email じゃなくて OpenID で取れればいいのに
Google / Yahoo! Inc. の Contact API、正直友達の Email アドレスとかもらっても、スパムまがいの招待状送るくらいでどうせみんな登録しないんじゃない?本当は Facebook Connect みたいに「友達をインポートする」とかの方がやりたいのに。
G も Y! も OP になっていて、Smart.fm 内には各社数万単位でその OpenID を使っているユーザがいるので、Friend リストを OpenID で受け取れれば、Facebook Connect や Twitter なんかより遥かに高い確率で友達が見つかる、はず。
そして Email じゃなければ、Y! Japan さんも対応しやすい、かも?
OpenSocial Container の User ID が OpenID だったらいいのに
これも一つ目とほぼ同じ。mixi ID なんて送ってきて、僕らにどうしろと言うのさ!(まぁほとんどの mixi OpenID には mixi ID 含まれてるけど)
ってことで、OpenSocial Container も、OP やってるなら ID を OpenID にしちゃえばいいよね。
mixi OpenID で OAuth Hybrid 対応して、発行された Access Token で OpenSocial の Activity API とか叩けるようになれば、国内では Facebook Connect に負けるわけ無い。
って、mixi と MySpace 以外にどこがあるのか分からんけど。
OP / SP が iPhone 対応してくれればいいのに
OP が iPhone 対応してないから、自分とこのサイトが iPhone 対応しても、結局ログインはしにくいまま。どうせ2-3ページ対応すればいいだけだし、iPhone 対応してくれればいいのになぁ〜。
と、idcon でちょうどタイムリーな話題もあったので、いろいろ言ってみた。
OAuth の POST リクエストでは、基本的に Content-type = x-www-form-urlencoded のデータを送ることが想定されています。
もちろんそれ以外にも Content-type が multipart/form-data や application/xml、application/json などの場合も、request body が signature base string に入らないという違いはあるものの、OAuth を使って POST することは可能です。
仕様的には。
smart.fm でも一部 API で multipart (upload file) や xml/json データ (save study data : comming soon) をポストしないといけない API があるのですが、みごと ruby の oauth gem ではそれらに失敗しました。
原因は、OAuth::Consumer#create_http_request の以下の1行。青色の部分を赤色の部分のように変えれば動きます。
module OAuth
class Consumer
def create_http_request(http_method, path, *arguments)
http_method = http_method.to_sym
if [:post, :put].include?(http_method)
# data = (arguments.shift || {}).reject { |k,v| v.nil? }
data = arguments.shift
data.reject! { |k,v| v.nil? } if data.is_a?(Hash)
end
以下略
end
end
というところを、github の master ではこの bug が fix されているのですが、rubyforge にはまだ反映されていなくて、ちょっとハマりました。これを fix すれば、こんな感じで POST できます。
access_token.post(path, params, {'Content-Type' => 'multipart/form-data'})
access_token.post(path, xml, {'Content-Type' => 'application/xml'})
access_token.post(path, json, {'Content-Type' => 'application/json'})
Read more
ruby oauth gem も rails oauth plugin も OAuth 1.0a 対応になったので、smart.fm も OAuth 1.0a に対応することにしました。
実装は既に終わったので、予定通りだと明日の昼前に本番に反映される予定です。
OAuth の脆弱性が発見されてから、暫定的に以下の2つの制約を加えましたが、OAuth 1.0a 対応でどちらの制約も外れます。
- authorize 時に渡される oauth_callback を無視
- request token の有効期間もかなり短く
ただし OAuth 1.0a では oauth_callback を指定するタイミングが authorize 時から get request token 時に変更になっているので、authorize 時に oauth_callback 渡しても無効、というのは変わりません。
もちろん従来のフローでアクセスする consumer に対する動作は変わらないので、oauth_callback を利用しない場合は特に consumer 側の変更は必要ありません。consumer 登録時に登録する oauth_callback は、従来通り有効です。
Read more
一部の方(特に女性)には「また意味の分からないこと書いてる」と言われるような内容ですが、あしからず(汗

今週の月曜日から4週間連続で、gihyo.jpに「特集:ゼロから学ぶOAuth」という連載を書かせていただいています。
第1回は「第1回 OAuthとは?―OAuthの概念とOAuthでできること」と題して、OAuth のざっくりした概念の説明と、smart.fm で使ってる Google OAuth を触ってもらって、裏でどういうことが起きてるかを簡単に説明するような内容です。
第2回と第3回は OAuth Consumer の実装と、実際の通信内容の理解を行います。実際に最初から実装手順を説明するのは大変なので、事前に実装しておいた OAuth Consumer Sample を使って話を進めていきます。
ちなみにこのサンプルアプリケーション、僕が smart.fm OAuth の動作検証に使う為のものだったりします。もちろん Rails で書いてます。
第4回は OAuth Service Provider の実装とサービス提供者側でチェックする項目などを説明する予定です。こちらも現在 Sample をちまちま実装中です。
そして OAuth Consumer の実装に興味を持たれた方は、ぜひ smart.fm API を使って何か!
以上、宣伝でした m_ _m
Read more

火曜日の夜に銀座の Apple Store で行われた OpenID TechNight #4 に参加してきました。
今回のイベントは OpenID Foundation Japan 以外の方も参加できるイベントだったので、OpenID BizDay よりもエンジニアっぽい参加者が多かったです。やっぱこっちの方が性に合う。
内容は ZIGOROu さんと tkudo による OpenID 入門的なお話でした。本当は OAuth & OpenID ハイブリッド仕様と Contract Exchange について詳しく知りたかったんだけれど、対象レベルが違ったのでしょうがない。
最後は時間が押してしまったのもあり、質問時間が全くなかったのが残念でしたが、プレゼンは分かりやすくて良かったです。いままでざっとしか理解してなかったところが、きっちり系統だって分かった気がします。
きっとそのうちプレゼン資料が公開されるはずなので、OpenID についての基本用語を押さえたい人にはお勧めです!!
しかし、夜にやるイベントなのに懇親会が無いってのは、ちょっと物足りない。
本日、iKnow! gem を OAuth と Basic 認証サポートを追加して、リスト作成/削除とリストへのアイテム追加/削除を実装して、version 0.1.0 をリリースしました。
OAuth を実装してみて、iKnow! OAuth も Google や Yahoo! の OAuth と同じくらい使いづらいのが分かって来ました。というか、そもそも若干動作がおかしい気がします(アセ
冬休みまであと2日しか営業日が無いので、急ピッチで iKnow! OAuth を使いやすくして、gem もリリースする予定です。もっと多くのデベロッパーに iKnow! API 使ってほしいしね。
ちなみに今 Basic 認証には Mechanize を使ってますが、こいつもまた動作が変。どうも DELETE の動作が怪しい。。。OAuth 関連のタスクがスムーズに行って時間に余裕があれば、Mechanize 使わないようにしたいです。
冬休み中には、RSpec でテストも書きたいな。
ps.
iKnow! gem 使った感想とかもらえると、モチベーション急上昇するよ☆