シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた
この記事は賞味期限切れです。(更新から1年が経過しています)
以前「Opauth」による簡単な認証を記事にしましたが、 またさらにシンプルな認証ライブラリ「HybridAuth」を知ったので試用してみました。
HybridAuthとは
HybridAuth, Open Source Social Sign On PHP Library
HybridAuth enable developers to easily build social applications to engage websites vistors and customers on a social level by implementing social signin, social sharing, users profiles, friends list, activities stream, status updates and more.
WebサイトにOAuth認証を簡単に設置する為のPHPライブラリです。 Twitter、Facebook等をはじめとした様々なサービスに対応しています。 サポートされているサービスは、現時点で32。
また、CodeIgniterやCake、Zend等のFWはもちろん、 WordPressやJoomula等のCMSのプラグインとしても利用できます。
HybridAuth と Opauth の違い
HybridAuthはOpauthと似たタイプのライブラリですが、 この2者で大きく異る点、というよりはHybridAuthのメリットを2つご紹介します。
- 自由にカスタマイズ可能なURL
- APIにアクセスするメソッド
自由にカスタマイズ可能なURL
Opauthは、ログインURLの一部にサービス名を含んでいないと正常に動きません。 URLの文字列から認証するサービスを判別する為です。 (ここらへん、前回の記事では説明不足でしたね。すみません。)
例えば、「http://www.example.com/login/twitter」ならtwitterの認証画面へ、 「http://www.example.com/login/facebook」ならFacebookの認証画面へ飛ぶわけですね。
一方HybridAuthには、そういった縛りはありません。 そのかわり、認証メソッドの引数にサービス名を渡す事になります。
APIにアクセスするメソッド
Opauthは認証するだけでしたが、HybridAuthは認証した後にAPIにアクセスしてgetしたりpostしたりできます。 これ一本で全部面倒見切れそうですね。
簡単な使い方
HybridAuthを hybirdauth/ ディレクトリに保存したと想定して、 次のようなファイル構成にしてみます。
login.php (ユーザーがアクセスするページ)
config.php (設定ファイル)
hybridauth/ (ダウンロードしたHybridAuthの構成ファイル)
├ config.php
├ index.php
├ install.php
└ Hybrid/
設定ファイルを作る
hybridauth/config.php を参考にして、config.phpを作って必要事項を明記しましょう。 ここでは、Twitterのログインに必要な物だけを記載しておきます。
<?php
return array(
"base_url" => "http://localhost:8080/hybridauth/",
"providers" => array(
"Twitter" => array(
"enabled" => true,
"keys" => array(
"key" => "[your app's consumer key]",
"secret" => "[your app's consumer secret]"
)
)
)
);
- base_url
- 実際にOAuthのやり取りをしてくれるスクリプトを指します。 多くの場合HybridAuthをインストールしたディレクトリになります。
- providers
- 認証したいサービスの設定を列挙していきます。 Twitterの場合は、作成したアプリケーションのconsumer keyとconsumer secretを記載します。
ログイン処理を書く
./login.php を用意して、ログイン処理を書いてみます。
<?php
// 設定ファイルを引数にして初期化する(配列でもOK)
$auth = new Hybrid_Auth( "./config.php" );
// 認証の実行(未認証の場合はここでリダイレクトされ、認証済みの場合はスルーされます)
$twitter = $auth->authenticate("Twitter");
// ↓ ここから認証済みの場合の処理
echo "<h1>認証されています!</h1>";
// ユーザー情報をまとめてくれる getUserProfile() メソッド
var_dump(
$twitter->getUserProfile()
);
// APIにアクセスしてみる
var_dump(
$twitter->api()->get("account/verify_credentials.json")
);
コメントの通りです。authenticateメソッドだけでほとんど余計な処理は省かれて、スッキリしていますね。
実際の動作としては、こんな感じみたいです。
- ユーザーがlogin.phpにアクセス
- hybridauth/index.php に移動、そこからサービスの認証画面へリダイレクト
- 認証が済んだらトークンをセッションに保存して、再びユーザーが元いたlogin.phpに移動
base_url について
config.php で出て来た base_url ですが、少し補足しておきます。
要するにこの項目は、全ての認証処理を代理で行なってくれるイケてるしヤバい hybridauth/index.php にアクセスさせる為の物です。 もっと言えば、そこにアクセスしたユーザーに対して hybridauth/index.php に記述されている処理が走りさえすれば良いです。
ですので、上の例示では hybridauth/ ディレクトリが公開ディレクトリにある前提になっていますが、 そうでない場合(非公開ディレクトリになっていたり、フレームワークの都合上アクセス出来なくなっていたりする場合)、 アクセスさせるファイル内で hybridauth/index.php をインクルードしさえすれば動くはずです。
例えば、”base_url” を /auth.php 等として、該当ファイルを設置し、
require_once("/the/path/to/hybridauth/index.php");
等としておけば良いですね。
気になった事柄
公式の例示では、APIアクセスも、認証済みである事を前提としていました。
認証を使わず、アプリに割り振られたのアクセストークンを使ったAPIアクセスは可能なのか、が気になりました。
それをするならそういうライブラリを使えば良いのですが、一つで済むならそれが一番ですよね。
気が向いたら調べてみます。
コメント