google サービス認証ダイアログ作成
#08 認証ダイアログを作ろう
http://dotinstall.com/lessons/google_connect_php_v2/9908
を参考に
CSRF対策実装
承認
を行う際の認証ダイアログの作成
認証ダイアログの作成は
https://accounts.google.com/o/oauth2/auth
にむけて
いろいろなオプションをつけて作成する
オプションに関しては
https://developers.google.com/accounts/docs/OAuth2WebServer?hl=ja#formingtheurl
のリファレンスを参考に
認証ダイアログ作成の前にCSRFを行う
これは
セッションのstate に推測しにくい文字列を入れ
googleにとばすときのURLにも
組み込んでおき
認証から返ってきたときの処理で
この値が正しいかチェックをするというもの
これにより
認証後にちゃんとgoogle から返ってきたことを確認できる
$_SESSION['state'] = sha1(uniqid(mt_rand(),true));
で、ハッシュにより値を作成
sha1() でハッシュを生成している
ハッシュについては
http://php.net/manual/ja/function.sha1.php
を参照
uniqid(mt_rand()
でランダムな値を生成して
オプションで true 指定なので
20 バイト長のバイナリ形式で返ってくる
値はできたので、次に認証ダイアログの
パラメータを作成
$params = array( 'client_id'=>CLIENT_ID, 'redirect_uri'=>SITE_URL.'redirect.php', 'status'=>$_SESSION['state'], 'approval_prompt'=>'force'. 'scope'=>'', 'response_type'='code', );
クライアントIDは
'client_id'=>CLIENT_ID
リダイレクトURIは
'redirect_uri'=>SITE_URL.'redirect.php'
認証の値となる state は
'status'=>$_SESSION['state']
毎回認証ダイアログをひらくオプションとして
'approval_prompt'=>'force'
どのデータを引っ張ってくるか指定するのは
'scope'=>''
の部分で指定
レスポンスのタイプを
'response_type'='code'
とする