googl 側でユーザ認証してもらう処理

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
が返ってきているのがわかる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です