googl 側でユーザ認証してもらう処理
#09 Googleで認証をしてみよう
http://dotinstall.com/lessons/google_connect_php_v2/9909
を参考に
Google側でユーザーを認証してもらうための処理を実装
まずは
scope の設定
scope は
スペースで区切って指定した情報をとってくる
動画で表示されている
Scopes for User Profile Permission がみあたらないので検索してみた
https://developers.google.com/accounts/docs/OAuth2LoginV1#formingtheurl
に掲載されている
ただ
Important: Google was an early adopter of OAuth 2.0 and created an early capability to perform authentication via OAuth 2.0. This document describes that initial implementation. Since creating this service, the OpenID Foundation has produced the OpenID Connect specification as a general way to authenticate users across identity providers using OAuth 2.0. Please see our updated OAuth 2.0 implementation which conforms to the OpenID Connect specification.
というメッセージがページ冒頭にもでているので
すでにバージョンが古いのかもしれない
とりあえず、これで進めてみる
https://www.googleapis.com/auth/userinfo.profile
でユーザのプロフィール取得
https://www.googleapis.com/auth/userinfo.email
でユーザのEメールを取得
scope を複数指定するには
スペース区切りでOKなので
'scope'=> https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email';
とする
google にとばすには
$url ='https://accounts.google.com/o/oauth2/auth'
にパラメータをつけるので
web api でよく使うように
ベースURLになる
https://accounts.google.com/o/oauth2/auth
に?をつけてその後にパラメータをつけていく
このときに使っている便利な関数が
http_build_query()
これは
http://php.net/manual/ja/function.http-build-query.php
の解説にあるように
エンコードされたクエリ文字列を生成できる
というもの
今回は
http_buid_query($params)
としたので
$params = array( 'client_id'=>CLIENT_ID, 'redirect_url'=>SITE_URL.'redirect.php', 以下略 );
で指定した様々なパラメータが
client_id=CLIENT_ID&redirect_url=SITE_URL.’redirect.php’&
というような web api でよく見る
&でつなげたパラメータに変換される
これで
$url ='https://accounts.google.com/o/oauth2/auth?'.http_build_query($params);
で
$url へ google にとばすURLが格納されるので
header() で実際に飛ばす
header('Location: '.$url); exit;
とする
次に、CSRF対策をしておく
if($_SESSION['state'] != $_GET['state']){ echo '不正な処理です’; exit; }
とすることで
state の値を検証して値が違うなら
エラーを表示して強制終了する
ここまでできたら、実働実験
仮想マシンをたちあげた状態で
http://dev.dotinstall.com/google_connect_php/
(ちなみに、ドメインは hostsファイルを 変更しているので、
このドメインでもローカルマシンにできる
自作やレンタルのサーバ
なら、自ドメインに変更する)
にアクセスして
Googleアカウントでログイン
を
クリックすると
Google の認証画面になり
アカウントの基本情報の表示
メール アドレスの表示
の許可をリクエストするので
承認する
をクリック
すると、画面は真っ白だけど
URLに
state
と
code
が返ってきているのがわかる