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 から返ってきたことを確認できる
1 | $_SESSION [ 'state' ] = sha1(uniqid(mt_rand(),true)); |
で、ハッシュにより値を作成
sha1() でハッシュを生成している
ハッシュについては
http://php.net/manual/ja/function.sha1.php
を参照
1 | uniqid(mt_rand() |
でランダムな値を生成して
オプションで true 指定なので
20 バイト長のバイナリ形式で返ってくる
値はできたので、次に認証ダイアログの
パラメータを作成
1 2 3 4 5 6 7 8 | $params = array ( 'client_id' =>CLIENT_ID, 'redirect_uri' =>SITE_URL. 'redirect.php' , 'status' => $_SESSION [ 'state' ], 'approval_prompt' => 'force' . 'scope' => '' , 'response_type' = 'code' , ); |
クライアントIDは
1 | 'client_id' =>CLIENT_ID |
リダイレクトURIは
1 | 'redirect_uri' =>SITE_URL. 'redirect.php' |
認証の値となる state は
1 | 'status' => $_SESSION [ 'state' ] |
毎回認証ダイアログをひらくオプションとして
1 | 'approval_prompt' => 'force' |
どのデータを引っ張ってくるか指定するのは
1 | 'scope' => '' |
の部分で指定
レスポンスのタイプを
1 | 'response_type' = 'code' |
とする