2011年12月16日金曜日

OAuth2.0 プロトコルを理解する

http://memoyasu.blogspot.com/2011/12/oauth20-facebook.html」で作成したサンプルアプリを使用し、OAuth2.0のプロトコルの中身をみてみる。


①ユーザがブラウザを使用してサンプルアプリにアクセスする。

②サンプルアプリからFacebookに認可要求する。
------------------------------------------------------------
Started GET "/client/oauth" for 127.0.0.1 at 2011-12-15 23:29:57 +0900
  Processing by ClientController#oauth as HTML
Redirected to https://graph.facebook.com/oauth/authorize?response_type=code&clie
nt_id=*************&redirect_uri=http%3A%2F%2Fopenam.yasuyasu.com%3A3001%2Fcli
ent%2Fcallback&scope=offline_access%2Cpublish_stream
------------------------------------------------------------
★reponse_typeでは、認可コードを返すように要求する。
★client_idには、Facebookに登録した際に作成されたクライアントアプリのIDを指定する。
★redirect_uriでは、戻り先URLを指定する。

③ユーザがブラウザを使用してFacebookとクレデンシャル情報をやりとりする。また、サンプルアプリに対してサービス利用を許可するかを認可する。

④Facebookがサンプルアプリに認可コードを返す。
------------------------------------------------------------
Started GET "/client/callback?code=AQDp......."
for 127.0.0.1 at 2011-12-15 23:29:58 +0900
------------------------------------------------------------

⑤サンプルアプリはFacebookに対して認可コードに基づき、アクセストークンを要求(POST)する。
------------------------------------------------------------
{"grant_type"=>"authorization_code", "code"=>"AQBaL_ue......", "client_id"=>"****", "client_secret"=>"****", :redirect_uri=>"http://openam.yasuyasu.com:3001/client/callback"}
------------------------------------------------------------
★codeには、Facebookから取得した認可コードを指定する。
★client_idには、Facebookに登録した際に作成されたクライアントアプリのIDを指定する。
★client_secretには、Facebookに登録した際に作成されたクライアントアプリのパスワードを指定する。
★redirect_uriでは、戻り先URLを指定する。

⑥Facebookは、サンプルアプリにアクセストークンを返す。
------------------------------------------------------------
access_token=AAAE.......
------------------------------------------------------------

⑦アンプルアプリは、Facebookに対して、アクセストークンに基づきサービスを要求(GET)する。
------------------------------------------------------------
https://graph.facebook.com/me?access_token=AAAE.......
------------------------------------------------------------

⑧Facebookはアクセストークンを検証し、OKであれば、サンプルアプリにサービス情報を返す。
------------------------------------------------------------
{\"id\":\"10..............\",\"name\":\"**********\",.............}
------------------------------------------------------------

0 件のコメント: