よくサイトで、twitterアカウントでログインとか、facebookアカウントでログインとかありますが、「Googleアカウントでログインする」を実装中です。
google cloud platform上で完結するアプリだと凄く簡単なのですが、APPサーバが別サイトの場合、google cloud platform上でGoogle App Engineを利用したAPPを作成して連携させないといけません。
今回は、google cloud platform上でgoogleアカウント認証サーバを作成して、googleアカウントログイン中なら、ID,ニックネーム,メールアドレスを呼び出し元に帰り、ログインしていなければgoogleのログイン画面が出てログイン後に、呼び出し元に帰るようにしました。
※APPサーバとgoogleアカウント認証サーバの連携には、ワンタイムパスワードを連携させて他から接続できないようにする予定。
作ってみて気が付いたのですが、普通にこれを設置してURL公開して知らないユーザが、もしgoogleアカウントログイン中でアクセスしたら、ID,ニックネーム,メールアドレスがサイトオーナーに知られてしまいます。
(但し、知られるのはこの3種類だけでパスワードとかは、知られませんのでそこは安心して下さい。)
尚、google cloud platformは無料ではありません。有料となりますが、インスタンスとかチューニングして、課金されないようにします。(弱小サイトなので無課金でいけるかと思います。)
=メモ=googleアカウント認証サーバ(そんなに大したものではありません)==
google cloud platformの使い方、Google APP Engine Launcherの使い方とかは他のサイトで。
—————————-
=メモ=googleアカウント認証サーバ(そんなに大したものではありません)==
google cloud platformの使い方、Google APP Engine Launcherの使い方とかは他のサイトで。
—————————-
<?php
require_once ‘google/appengine/api/users/UserService.php’;
use googleappengineapiusersUser;
use googleappengineapiusersUserService;
$user = UserService::getCurrentUser();
$login = UserService::createLoginURL($_SERVER[‘REQUEST_URI’]);
if ($user == null) {
ob_start();
header(‘Location: ‘ . $login);
ob_flush();
}else{
$op = $_POST[‘op’];
$uri = $_SERVER[‘REQUEST_URI’];
$userid = $user->getUserID();
$nicknme = $user->getNickname();
$email = $user->getEmail();
$str = $userid . “t” . $nicknme . “t” . $email . “t” . $op . “t” . $uri;
$sstr = var_serialize($str);
echo “<html><head></head>”;
echo “<body onload=’document.returnlogin.submit();’>”;
echo “<form name=’returnlogin’ method=’post’ action=’https://xxxxx.xxxx/login.php’>”;
echo “<input type=’hidden’ name=’fg’ value='” . $sstr . “‘>”;
echo “</form>”;
echo “</body></html>”;
function var_serialize( $obj ){
//データを暗号化します。受け取り側は複合化する。
}
?>
これだけです。
APPサーバ側は、googleアカウントでログインしたい時は、googleアカウント認証サーバを
formでsubmitとすればOKです。
既にログイン中の時は、https://xxxxx.xxxx/login.phpに戻って来ます。