2016年5月21日土曜日

APPサーバにGoogleアカウントでログインする。

よくサイトで、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 google\appengine\api\users\User;
use google\appengine\api\users\UserService;

$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に戻って来ます。

ログインしていない時は、googleアカウントログイン画面が表示され、
ログイン後、
に必要情報を付加して戻って来る。



0 件のコメント:

コメントを投稿