"gauth" GoogleAccountでいっちゃんいけてる認証方法を考えたよ

1月28日に開催された「第2回PHP初心者勉強会」のLTで発表してきたgauthについて、詳しく説明したいと思います。

発表資料

http://www.slideshare.net/dai861/gauth

背景

インターネット屋さんをしていると、
管理画面とか、売上票とか、なんちゃらツールとか、
管理・運営専用で、一般には公開したくないものってたくさんつくりますよね。

みなさんはどんな方法で鍵をかけてますか?

BASIC認証
IP制限?
wordpressみたいなユーザー管理機能を構築する?

小規模なツール程度のものに対して、

・社内の人間だけがアクセスできるようにとか
・自宅でも使いたいとか
・退職者からは隠したいとか

こういう大人の事情が入ってくると、いちいちめんどくさいです。

いまどきOAuthやで

昨今、twitterfacebookのOAuthで登録やログインができるのが標準になりつつあります。
サービスごとにIDやパスワードを覚えなくてよいので、非常に便利ですね。
この仕組みをお仕事でも使いたいです。

そこでgauth

アクセスコントロールリストとしてGoogleDocsのドキュメントを使う、
いけてる認証+認可の方法です。

今動いてるくそみたいな1ファイルアプリでも認証機能を付与できるようにライブラリ()を作ったので、githubに公開します。
https://github.com/d-sak/gauth

はじめかた

1.Google OAuth2.0のクライアントIDを発行する
このページ(https://code.google.com/apis/console/)の
「Create an OAuth 2.0 client ID...」から「Web Application」としてクライアントIDを発行します。
リダイレクトURLはgauth.phpを設置場所を指定。

2.アクセスコントロール用のドキュメントを用意する
なんでもいいのでGoogleDocsのドキュメントを用意します。
作成したドキュメントのURLのID部分(id=???)を覚えておきます。

3.ウェブルートにgauth.phpを設置する
$clientId, $clientSecret, $docId, $onSucceedをそれぞれ書き換えて、
ウェブルートに設置します。

4.アプリに鍵をかける
かけ方はなんでもいいですけど、アプリの上部にこんな感じのコードを仕込めば完了です。

<?php
session_start();
if(empty($_SESSION['GAUTH_TOKEN'])){
    header("Location: ./gauth.php?login");
    exit;
}
?>

応用編

みんな大好きPHPMyAdminにもむりやり差し込めます。
phpMyAdmin/common.inc.phpのPMA_auth_checkの上あたりに

if(empty($_SESSION['GAUTH_TOKEN'])){
    header("Location: ./gauth.php?login");
    exit;
}

./gauth.php

session_name('phpMyAdmin'); //セッション名を共通に
session_start();

これを仕込むことで、自由にアクセス制御ができるようになります。
いけてますね^^

みんなの反応

最後に

実はぜんぜんセキュアじゃないとかだったら怖いので教えて下さい。

関西PHPユーザーズグループでは初心者〜上級者を対象に
いろいろなイベントを開催していきたいと思います。宜しくお願い致します。