やる夫で学ぶOAuth 〜やる夫がユニクロの行列に並んだようです〜
今日もTwitterを見ているやる夫ですが・・・ / ̄ ̄ ̄\ おや?ツイッターの様子が・・・ / ─ ─ \ ________ / (●) (●) \. .| | | | (__人__) | .| | | \ ` ⌒´ / | | | / \ | | | ______ /:υ::─ニjjニ─ヾ /:::li|.:( ○)三 (○)\ /RT ユニクロ行列で個人情報流出してやんのww情弱ざまあwww (:::||!.:υ::::: (__人__)):::: i| ____  ̄// ̄ ̄ )::::::::::::: |r┬-| li::::/ | | /::::::::::::::: `ー ' ::::::ヽ | |
※注:こういう騒ぎがありました。
http://uinyan.com/uniqlo_line_vulnerability/
|┃三 / ̄\ |┃ | | |┃ \_/ ガラッ. |┃ | |┃ ノ// ./ ̄ ̄ ̄ \ |┃三 / ::\:::/:::: \ |┃ / <●>::::::<●> \ |┃ | (__人__) | |┃三 \ ` ⌒´ / |┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \ γ ⌒⌒ヽ / ̄ ̄\ ( ( ヽ ) ノ /_ノ \ (⌒) 三 ノ 从 ゝ ( ●)( ●) ヽ 三/ | ニ ____ (⌒) これはどういうことだお!! . | (__人__) u } | | /\ / ) し / | ミ お前に紹介されたサービスに登録したら | ` ⌒´ ノ ! 、 /(○ )::(○ )⌒\/ | ミ 個人情報が漏れたお!!責任とるお!! . | } \./:::::::(_人_):::::::: i' | . ヽ } | )ww) | | ヽ ノ ヘ \ `ー" ノ / く 、_/っ/ \ . . \ | \--一'' \ ノ L____ ⌒ \ / \ / (○) (○)\ / (__人__) \ | |::::::| | ゆるせないお!! \ l;;;;;;l /l!| ! ユニクロは酷いんだお!! / `ー' \ |i / ヽ !l ヽi ( 丶- 、 しE |そ ドンッ!! `ー、_ノ �堯�l、E ノ < レY^V^ヽl / ̄ ̄\ / _ノ \ | ( ●)(●) . | (__人__) まあ落ち着け・・・ | ` ⌒´ノ . | } ミ ピコッ . ヽ } ミ /\ ,☆____ ヽ ノ \ \ / \ / く \. /\/ ─ ─ \ | `ー一⌒) / (●) (●) \ | i´ ̄ ̄ ̄ \ | (__人__) | \_ ` ⌒´ / / \ / ̄ ̄\ / _ノ \ | ( ー)(ー) . | (__人__) 確かにユニクロのサービスはセキュリティ的に | ` ⌒´ノ 好ましくない作りになっていた .l^l^ln } . ヽ L } だがそれで即、個人情報の流出があった事にはならない ゝ ノ ノ / / \ / / \ . / / |ヽ、二⌒)、 ヽ__ノ ____ ━┓ / \ ┏┛ / \ ,_\. ・ そうなのかお? / (●)゛ (●) \ Twitterでは個人情報が流出したって言ってたお | ∪ (__人__) | / ∩ノ ⊃ / ( \ / _ノ | | .\ “ /__| | \ /___ / / ̄ ̄\ / _ノ \ Twitterで流れる情報にはデマも混じっている | ( ●)(●) . | (__人__) 今回の場合は、 | ` ⌒´ノ 収拾されたパスワードがサービス元から .l^l^ln } さらに漏れなければ大丈夫だろう .ヽ L } ゝ ノ ノ それにOAuthが使われるようになる前はパスワードを / / \ そのまま収拾するなんて普通だった / / \ . / / -一'''''''ー-、. 人__ノ (⌒_(⌒)⌒)⌒)) ____ /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ OAuth?それはなんだお? | |r┬-| | なんて読むんだお? \ `ー'´ / / ̄ ̄\ / _ノ \ OAuthは、オーオースと読む | ( ●)(●) . | (__人__) 簡単に言えば、Twitterと連携するサービスに | ` ⌒´ノ Twitterのパスワードを渡さなくてもよくなる仕組みだな . | } . ヽ } これを使えば、運営側に悪意も持った人間が居ても ヽ ノ 勝手にやる夫のプロフィールやパスワードを変えたり出来なくなる / く \ | \ \ | |ヽ、二⌒)、 / ̄ ̄\ / ∪ \ ____ |:::::: | / \ . |::::::::::: ∪ | / ⌒ ⌒ \ そんなの出来るわけないお |:::::::::::::: |/ (●) (●) \ やる夫はOAuthの画面なんて見たことないけど . |:::::::::::::: } | (__人__) | 具体的にはどうやってるんだお? . ヽ:::::::::::::: } \ ` ⌒´ _/ ヽ:::::::::: ノ | \ /:::::::::::: く | | | | -―――――|:::::::::::::::: \-―┴┴―――――┴┴―― |:::::::::::::::|ヽ、二⌒) / ̄ ̄\ / _ノ \ ( ;;;;( そうだな・・・ | ( ─)(─ ) ;;;;) | (__人__) /;;/ では、分かりやすいように . | ノ l;;,´ Twitter役に登場してもらおう | ∩ ノ)━・' / / _ノ´ ちなみに、俺が連携サービス・・・ (. \ / ./ │ つまり togetter や twilog なんかだと思ってくれ \ “ /___| | . \/ ___ / _ __ ___ ヾ,ゝ '⌒ヾ'/ ! ((人从リ〉 < 私がTwitter役の、ついったんよ! 弋 !|゚ ヮ゚ノ! | サーバールームからわざわざ来てやったんだから リr介 リ | 感謝しなさい! 〔三二フ__,ゝ=='ニ! . じ'フ
ついったん(http://twitter.com/twittan)
まず、連携サービスにTwitter連携したサービスを使いたいことを伝える
大抵はログインのリンクをクリックすることが、それに当たるだろうな
__
/ \
/ _ノ \
| ( ●)(●) キリッ ____
. | (__人__) /\ / \ サービス使いたいお!
| ` ⌒´ノ /(ー) (ー) \ でもパスワードを渡す気はないお!!
. | } / ⌒(__人__)⌒ \
. ヽ } \ | |r┬-| |
ヽ ノ \ \ `ー'´ _/
/ く. \ \ ノ \
| \ \ (⌒二 |
| |ヽ、二⌒)、 \ | |
連携サービス ユーザー
そうしたら連携サービスは、Twitterにそれを伝える
/ ̄ ̄\ ( ;;;;( やる夫がサービス使いたいって
/ ._ノ ヽ、\) ;;;;) 言ってたぞ
_ __わかったわ! | (●)(●)/;;/
ヾ,ゝ '⌒ヾ'/ | (__人__)l;;,´|
! ((人从リ〉 | ./´ニト━・' .l
弋 !|゚ ヮ゚ノ! | .l _ニソ }
リr介 リ /ヽ、_ノ /
〔三二フ__,ゝ=='ニ! __/ / ノ__
. じ'フ / / / `ヽ.
/´ ./ ,. ヽ.
Twitter ト、_,/. |、 ヽ
| |/ /
連携サービス
____
/ \
/ ─ ─\ ちょっと待つお
/ (●) (●) \ やる夫がそのまま、ついったんに伝えちゃ駄目なのかお?
| (__人__) |
/ ∩ノ ⊃ /
( \ / _ノ | | やる夫もついったんとお喋りしたいお
.\ “ /__| |
\ /___ /
/ ̄ ̄\
/ _ノ \ OAuth認証は各連携サービスごとに管理をするから、
| ( ●)(●) 俺(連携サービス)を通さなきゃだめだ
. | (__人__)
| ` ⌒´ノ それにさっきは簡単に言ったが
. | } 実際やってる通信は複雑だぞ
. ヽ } 見てみるか?
ヽ ノ
/ く \ \
| \ \ \
| |ヽ、二⌒)、 \
秘 oauth_token シグネチャ リクエストトークンURL
密 ハッシュ関数 POST ハッキング対策
鍵 情報セキュリティ
コンシューマ 署 OAuthバージョン
名 Nonce
PDCAサイクル BASE64
トークン秘密鍵 / ̄ ̄ ̄\
ユーザ OAuth Core 1.0 ./ ─ ─ \ 情報漏洩
/ <○> <○> \
サービスプロバイダ RSA-SHA1 | (__人__) | RFC3447
タイムスタンプ \ ` ⌒´ /
エンコーディング / \ アクセストークン
____
/ノ ヽ、_\
/( ○)}liil{(○)\ な、なんだお この呪文は!?
/ (__人__) \ 意味がわからないお!
| ヽ |!!il|!|!l| / |
\ |ェェェェ| /
_ __ ___
ヾ,ゝ '⌒ヾ'/ | 安心しなさい!
! ((人从リ〉 < その辺のめんどくさいことは、利用者は一切考えなくていいわ!
弋 !|゚ ヮ゚ノ! |
リr介 リ | 利用者は許可を出すかどうかを選ぶだけでいいの
〔三二フ__,ゝ=='ニ! 便利な仕組みを作った私に感謝することね!
. じ'フ
___
/ \
/ノ \ u. \ よ、よかったお
/ (●) (●) \
| (__人__) u. | でも、なんでこんな複雑なんだお!
\ u.` ⌒´ /
ノ \
/´ ヽ
| l \
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
/ ̄ ̄\
/ _ノ \ まあ、詳しい説明は割愛するが
| ( ー)(ー) ・間違いなく送信者から送られたこと
. | (__人__) ・途中でデータが改ざんされていないこと
| ` ⌒´ノ などを保証するためだな
.l^l^ln }
. ヽ L } これも利用者は、深く考えなくてもいいところだ
ゝ ノ ノ
/ / \
/ / \
. / / |ヽ、二⌒)、
ヽ__ノ
_ __ ___
ヾ,ゝ '⌒ヾ'/ | 話を戻すわ!
! ((人从リ〉 < やらない夫(連携サービス)から連絡を受けたら、私はやる夫に
弋 !|゚ ヮ゚ノ! | 「やらない夫が、やる夫のアカウントを使ってTwitterに読み書きしてもいいか」
リr介 リ | を確認しにいくの
〔三二フ__,ゝ=='ニ!
. じ'フ
_ __ ___
ヾ,ゝ '⌒ヾ'/
! ((人从リ〉 <この画面で許可を出しなさい!
弋 !|゚ ヮ゚ノ!
リr介 つ 【認証画面】
〔三二フ__,ゝ=='ニ!
. じ'フ
Twitter
___
/ \
/ ⌒ ⌒ \ わかったお
/ ,(⌒) (⌒)、 \ 許可をだすお
| /// (__人__)/// ||
\ ` ヽ_ノ /
ヽ , __ , イ
| \
利用者
____
/ \ ん? でもこれって
/ ノ \u.\ 結局パスワード入れるなら一緒じゃないかお?
/ (●) (●) \ 何か違うんだお?
| (__人__) u. |
\ u .` ⌒´ /
/ ̄ ̄\
/ _ノ \ 違う
| ( ー)(ー) 認証画面のURLを確認してみてくれ
. | (__人__)
| ` ⌒´ノ 俺(連携サービス)ではなく、
. | nl^l^l ついったん(Twitter)のURLが表示されてるだろ
. ヽ | ノ
ヽ ヽ く やる夫は最初に「OAuth画面なんて見たことない」と
/ ヽ \ 言っていたが、これがOAuthの認証画面だ
_ __ ___
ヾ,ゝ '⌒ヾ'/ | つまりこの画面では
! ((人从リ〉 < 私(Twitter)とやる夫(利用者)の間で通信が行われるから
弋 !|゚ ヮ゚ノ! | パスワードはやらない夫(連携サービス)には、ばれないの!
リr介 リ
〔三二フ__,ゝ=='ニ!
. じ'フ
____
/ \
/ ─ ─\ ふむふむ
/ (●) (●) \
| (__人__) | で、やる夫(利用者)が許可を出したらどうなるんだお?
./ ∩ノ ⊃ /
( \ / _ノ | |
.\ “ /__| |
\ /___ /
私(Twitter)から、やらない夫(連携サービス)に
「許可された操作のみが行える『許可証』」が渡されるわ!
_ __ ___ よろこびなさい!
ヾ,ゝ '⌒ヾ'/ | やる夫から許可をもらったから
! ((人从リ〉 < その分の操作が出来る許可証を作ってあげたわ!
弋 !|゚ ヮ゚ノ!
リr介 つ【許可証(やる夫)】
〔三二フ__,ゝ=='ニ!
. じ'フ
Twitter
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
. | (__人__) うむ
| ` ⌒´ノ ありがたくいただこう
. | }
. ヽ }
ヽ ノ 【許可証(やる夫)】
/ く 、_/ /
| \--一''
連携サービス
あとは俺(連携サービス)が貰った許可証を使っていろんな操作を行うわけだ
正確にはもっと細かい手順があるんだが
まあ、大まかに言えばこんなもんだ
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
. | (__人__)
| ` ⌒´ノ
. | } ホイ、この許可証使って、
. ヽ } やる夫のTwitterアカウントに「わかったお!」
ヽ ノ って呟かせてやれ
/ く
| \
| |ヽ、二【許可証(やる夫)】
連携サービス
_ __ ___
ヾ,ゝ '⌒ヾ'/ | 許可証を確認したわ
! ((人从リ〉 < いいわよ!やる夫のTwitterアカウントに「わかったお!」
弋 !|゚ ヮ゚ノ! | って呟かせてあげる
リr介 リ
〔三二フ__,ゝ=='ニ!
. じ'フ
Twitter
┌───┐
│ やる. │ < 『わかったお!』
│ 夫 │
└───┘
やる夫のTwitterアカウント
/ ̄ ̄ ̄\
γ⌒) (⌒ヽ うーん
/ _ノ ノ \ \ `、 なにがなんだかわからなくなってきたお
( < (○) (○) | )
\ ヽ (__人__) / /
_ __ ___
ヾ,ゝ '⌒ヾ'/ | まあ仕組みを知っておくことに越したことはないけれど、
! ((人从リ〉 < そんなに難しく考える必要はないわ!
弋 !|゚ ヮ゚ノ! |
リr介 リ | 大切なのは、URLがちゃんとtwitterになってる画面で
〔三二フ__,ゝ=='ニ! パスワードを入れるようにすることね!
. じ'フ
/ ̄ ̄\
/ _ノ \ ( ;;;;( そうだな・・・
| ( ─)(─ ) ;;;;)
| (__人__) /;;/ twitter以外のURLでパスワード入れる、ということは
. | ノ l;;,´ そのサイトの管理者を信頼して自分のTwitterアカウントの全て預ける
| ∩ ノ)━・' ということでもある
/ / _ノ´
(. \ / ./ │ 昔は仕方なかったが、今はそうしなくても済む仕組みがあるんだから
\ “ /___| | パスワードを預けるべきじゃないだろ、常識的に考えて
. \/ ___ /
____
/⌒ ー、\ わかったお!
/( ●) (●)\ とにかくパスワードを入れるときには
/::::::⌒(__人__)⌒:::::\ URLにちゃんと注意するようにするお!
| |r┬-/ ' |
\ `ー'´ /
_ __ ___
ヾ,ゝ '⌒ヾ'/
! ((人从リ〉 やる夫で学ぶOAuth・完
弋 !|゚ ヮ゚ノ!
リr介 ノシ / ̄ ̄\
〔三二フ__,ゝ=='ニ! / ヽ_ .\
じ'フ ( ●)( ●) | ____
(__人__) | / \
l` ⌒´ | / ─ ─ \
. { |/ (●) ( ●) \
{ / | (__人__) |
,-、 ヽ ノ、\ ` ⌒´ ,/_
/ ノ/ ̄/ ` ー ─ '/>< ` ー─ ' ┌、 ヽ ヽ,
/ L_  ̄ / _l__( { r-、 .ト
_,,二) / 〔― ‐} Ll | l) )
>_,フ / }二 コ\ Li‐'
__,,,i‐ノ l └―イ ヽ |
少し前から書いてみようと思っていたのですが、先日のユニクロ行列騒ぎでTwitter認証が話題になっていたので書いてみました。
参考:
OAuth Core 1.0 仕様 日本語訳
http://labs.i-revo.jp/wiki/?xtra/OAuth1.0
Yahoo!デベロッパーネットワーク - OAuth - フロー
http://developer.yahoo.co.jp/other/oauth/flow.html
ついったんのAAはid:imac2xsss様のサイトから使わせてもらいました。
http://d.hatena.ne.jp/imac2xsss/20070519/