目次一覧
状態:-
閲覧数:964
投稿日:2018-07-20
更新日:2019-02-12
Service Provider / Consumer / User
Consumer Key / Consumer Secret / Request Token / OAuth Verifier
処理の流れ1.「Consumer」 は「Service Provider」より、予めOAuth利用許可を得ておく
処理の流れ2.「Consumer」 は、「Consumer Key」「Consumer Secret」 を元に、「Service Provider」より「Request Token」を取得
処理の流れ3.「Consumer」 は、「Request Token」をもとに認証用URLを作成
処理の流れ4. 「Consumer」 は、作成した認証用URLへリダイレクト
処理の流れ5.「Consumer」が規定内容に関して「Service Provider」へアクセスを行い、データ操作すること を「User」が認証
処理の流れ6.「Consumer」はバックグラウンドで「Service Provider」と通信を行い、認可済の「Request Token」を実際のアクセス権を示す「Access Token」と交換
処理の流れ7.「Consumer」 は、取得した Access Token を用い、予めユーザーが許可した範囲内で、自由に「Service Provider」と通信を行い、データ操作を実施
Consumer Key / Consumer Secret / Request Token / OAuth Verifier
処理の流れ1.「Consumer」 は「Service Provider」より、予めOAuth利用許可を得ておく
処理の流れ2.「Consumer」 は、「Consumer Key」「Consumer Secret」 を元に、「Service Provider」より「Request Token」を取得
処理の流れ3.「Consumer」 は、「Request Token」をもとに認証用URLを作成
処理の流れ4. 「Consumer」 は、作成した認証用URLへリダイレクト
処理の流れ5.「Consumer」が規定内容に関して「Service Provider」へアクセスを行い、データ操作すること を「User」が認証
処理の流れ6.「Consumer」はバックグラウンドで「Service Provider」と通信を行い、認可済の「Request Token」を実際のアクセス権を示す「Access Token」と交換
処理の流れ7.「Consumer」 は、取得した Access Token を用い、予めユーザーが許可した範囲内で、自由に「Service Provider」と通信を行い、データ操作を実施
Service Provider / Consumer / User
Service Provider
片仮名表記
・サービスプロバイダー
アプリケーションの認証を行う
・Twitter など
Consumer
片仮名表記
・コンシューマー
アプリケーション
・ 認証を受け、サービスプロバイダーが持つユーザーリソースを操作
User
片仮名表記
・ユーザー
リソースの持ち主
Consumer Key / Consumer Secret / Request Token / OAuth Verifier
Consumer Key
登録証明書
・Service Provider → Consumer
Consumer Secret
登録証明書
・Service Provider → Consumer
Request Token
「Consumer」が「Service Provider」からアクセス・トークンを発行してもらうまでの間、通信の際に合言葉として使われていくもの(利用許可証)
・取得した段階で、セッションへ保存するととともに、認証用URLを作成するために利用する
・なお、「Request Token」を発行するためには、「Consumer Key」「Consumer Secret」が必要
・Service Provider → Consumer
OAuth Verifier
証明情報
Access Token
APIを利用するための鍵(アカウント情報や使用アプリなどの環境情報を紐付けしてハッシュ化した文字列)
・「Request Token」「OAuth Verifier 」が揃っていて、かつ、正しい場合のみ発行される
・コンシューマーは、一旦アクセストークンを手に入れたら、パスワードの変更などを除いて、サービスプロバイダーでできることは、「post」「DM 送信」等ほとんどなんでも操作可能(但し、予めユーザーが許可した範囲内に限る。逆に言えば、ユーザーが、「読み書き全部許可」等する際には、細心の注意が必要)
・なお、 ユーザは、このコンシューマーへの許可を取り消すことで、いつでも好きなときにアクセストークンを無効にすることが出来る
・Service Provider → Consumer
処理の流れ1.「Consumer」 は「Service Provider」より、予めOAuth利用許可を得ておく
「Consumer Key」と「Consumer Secret」値を取得
「Service Provider」に「Consumer」登録を行い、「登録証明書」にあたる「Consumer Key」と「Consumer Secret」値を取得
・ この操作は、「User」がリクエストを行う前に、「Service Provider」と「Consumer」の間で1回だけ行えばよい
・ つまり、「User」に対してサービスを提供する前に、Webサービス(「Service Provider」とアプリケーション)間での登録処理が必要
※ 登録処理そのものは、サービス提供者があらかじめ行っておくケースと、「User」が初回利用時に自分で行うケースがある
※ Twitterでは、「Twitterアプリの登録」を行なうことで、「Consumer Key」「Consumer Secret」などが取得出来る
処理の流れ2.「Consumer」 は、「Consumer Key」「Consumer Secret」 を元に、「Service Provider」より「Request Token」を取得
リクエストトークンを取得
「Consumer」 は、「Consumer Key」「Consumer Secret」 を元に、「Service Provider」より「Request Token」を取得
・この操作は、ユーザー操作がトリガー
・「Consumer Key」と「Consumer Secret」で身の証を立てて、「Request Token」を取得
・具体的には、「利用許可証」にあたる「Request Token」が、「Service Provider」から「Consumer」へ渡る
コード例
1.
$to = new TwitterOAuth($consumer_key, $consumer_secret);
$r_tokenset = $to->getRequestToken();
$r_tokenset = $to->getRequestToken();
2.Abraham Williams 「PHP Library to support OAuth」を利用した「ツイッターでログインするWebサービス」
▼redirect.php
$oauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
$requestToken = $oauth->getRequestToken();
$requestToken = $oauth->getRequestToken();
処理の流れ3.「Consumer」 は、「Request Token」をもとに認証用URLを作成
認証用URLを作成
「Consumer」 は、「Request Token」をもとに認証用URLを作成
・ token と token_secret がセットで返ってくるので取得し、一旦セッションへ保存(6で再びサービスプロバイダへ投げる)
・ token から 認証用URL を作成( 未認可のRequest TokenをURL Parameterに付加 )
・ 引数をいろいろセットしたり、確認用のパラメータを計算したりといろいろめんどくさい
・ だいたいライブラリが URL を作る関数を用意してくれている
・Abraham Williams 「PHP Library to support OAuth」の場合は、OAuth.php にあるTwitterOAuthクラスのgetAuthorizeURLメソッドが該当
コード例
1.
$_SESSION['request_token'] = $r_tokenset['oauth_token'];
$_SESSION['request_token_secret'] = $r_tokenset['oauth_token_secret'];
$url = $to->getAuthorizeURL($_SESSION['request_token']);
$_SESSION['request_token_secret'] = $r_tokenset['oauth_token_secret'];
$url = $to->getAuthorizeURL($_SESSION['request_token']);
2.Abraham Williams 「PHP Library to support OAuth」を利用した「ツイッターでログインするWebサービス」
▼redirect.php
$_SESSION['oauth_token'] = $requestToken['oauth_token'];
$_SESSION['oauth_token_secret'] = $requestToken['oauth_token_secret'];
$url = $oauth->getAuthorizeUrl($requestToken['oauth_token'], false);
$_SESSION['oauth_token_secret'] = $requestToken['oauth_token_secret'];
$url = $oauth->getAuthorizeUrl($requestToken['oauth_token'], false);
処理の流れ4. 「Consumer」 は、作成した認証用URLへリダイレクト
作成した認証用URLへ、実際にリダイレクト
具体的には、「User」が「Consumer」のWebページのリンクをクリックすることで、「Service Provider」のWebページへと画面遷移する、行為を指す
コード例
Abraham Williams 「PHP Library to support OAuth」を利用した「ツイッターでログインするWebサービス」
▼redirect.php
header('Location: '.$url);
exit;
exit;
画面表示例
認証用URLへのテキストリンク表示
(遷移先画面である)認証用URLの画面表示
処理の流れ5.「Consumer」が規定内容に関して「Service Provider」へアクセスを行い、データ操作すること を「User」が認証
2択
「User」は、「許可する(Allow)」か「拒否する(Deny)」の何れかを選ぶ
・ 「何を許可するか」が明記されている(例えば、データを更新する、消去する、といった操作)ので、選択する前に必ず確認
・ 「許可」を選ぶと、「Consumer」による「Service Provider」のユーザーリソースへのアクセスに、「User」が同意したことになる
・ 「許可」が終わると、 Twitter はアプリケーションを登録したときに設定した「コールバックURL」へリダイレクトする。その際「Service Provider」は、認可済の「Request Token」をURLに含める
画面表示例
「コールバックURL」設定ページ
※リダイレクトではなく暗証番号(PIN)を使う方法もある
処理の流れ6.「Consumer」はバックグラウンドで「Service Provider」と通信を行い、認可済の「Request Token」を実際のアクセス権を示す「Access Token」と交換
「Access Token」取得
「Request Token」をもとに「Access Token」を取得
・ 「3」で、セッションへ保存しておいた「Request Token」を利用して、「Service Provider」へアクセス
・ 「5」で、ユーザにより許可されていれば 「Service Provider」は「Access Token」を返す
$to = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['request_token'], $_SESSION['request_token_secret']);
$a_tokenset = $to->getAccessToken();
Abraham Williams 「PHP Library to support OAuth」
▼callback.php
session_start();
$oauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
$accessToken = $oauth->getAccessToken($_GET['oauth_verifier']);
// var_dump($accessToken);
$me = $oauth->get('account/verify_credentials');
処理の流れ7.「Consumer」 は、取得した Access Token を用い、予めユーザーが許可した範囲内で、自由に「Service Provider」と通信を行い、データ操作を実施
Twitter API v1.1 / OAuth Core 1.0 Revision A / OAuth2.0 / ライブラリ未使用