Mach3.laBlog

シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた

この記事は賞味期限切れです。(更新から1年が経過しています)

以前「Opauth」による簡単な認証を記事にしましたが、 またさらにシンプルな認証ライブラリ「HybridAuth」を知ったので試用してみました。

シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた

HybridAuthとは

HybridAuth, Open Source Social Sign On PHP Library

HybridAuth

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つご紹介します。

  1. 自由にカスタマイズ可能なURL
  2. 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 keyconsumer 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メソッドだけでほとんど余計な処理は省かれて、スッキリしていますね。

実際の動作としては、こんな感じみたいです。

  1. ユーザーがlogin.phpにアクセス
  2. hybridauth/index.php に移動、そこからサービスの認証画面へリダイレクト
  3. 認証が済んだらトークンをセッションに保存して、再びユーザーが元いた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アクセスは可能なのか、が気になりました。
それをするならそういうライブラリを使えば良いのですが、一つで済むならそれが一番ですよね。
気が向いたら調べてみます。

コメント

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

*