Opauth - はじめに

Opauth は OAuth または OpenID プロバイダに対する認証のためのサポートを提供するマルチプロバイダ認証フレームワークです。 アプリケーションで Opauth を使用することにより、一連の新たな認証情報を作り、新しいパスワードを覚えておくことの代わりに、OAuth を使うメジャーなウェブアプリケーションの 1 つからユーザーが既存の認証情報を利用することができます。 OAuth をサポートしているウェブアプリケーションには、 Facebook 、 Twitter 、 Google 、 Instagram 、 Paypal 、 LinkedIn 、 Vimeo 、 Foursquare や Flickr が含まれています。

これらの OAuth プロバイダのいずれかから、 OAuth のサービスを使用するだけでなく、シングルサインオンも同様に提供しています。 これらのサービスのいずれか (例えば、 Facebook) のウェブサイトにユーザが既にログインしている場合に、あなたのウェブサイトに来て Facebook のアカウントを使用しログインをしようとすると Opauth は既にログインしていることを検出するため、認証情報の入力をユーザーに求めることはありません。 その代わりに、ユーザーが意識することなくアプリケーションへログインされます。

統合

Auth パッケージは、アプリケーションで簡単に使用できるような Opauth ライブラリのラッパークラスを提供し、 Simpleauth と Ormauth ドライバセットの両方とのシームレスな統合を提供します。

完全な統合とは、ユーザが初めてアプリケーションを訪問し、ログインするための手段としての OAuth プロバイダを選択した時に、 Opauth 統合クラスがユーザーに意識させることなく、ローカルユーザーのアカウントを作成し、そのローカルアカウントを使用してユーザーをログインすることを意味します。 これは、選択した Auth ドライバセットの (グループの割り当てや ACL のような) すべての機能も Opauth を通じてログインするユーザーで有効であることを意味します。

また、複数のプロバイダのサポートを有効にすることもできます。これは、ユーザーに意識させることなく作成されたアカウントであろうと、 手動で作成したアカウントであろうと、ユーザーが既存のアカウントに追加の OAuth プロバイダーをリンクすることができます。まあ、彼らは自分の Facebook 、 Twitter や Google の認証情報を使用するにせよ使用しないにせよ、管理がより困難になるでしょうが、あなたのアプリケーションは、同じユーザーアカウントを見ており、 ユーザーが実在するかについての心配することなく、あなたのシステムに複数回 ACL を適用することができるでしょう。

インストールと設定

もしこれが Auth パッケージとの最初の出会いならば、最初に SimpleauthOrmauth のセクションを確認し、どちらを利用するか決定し、指示に従ってインストールしてください。 一旦それをしたならば、ここに戻り読み進めてください。

Opauth を使用できるようにするには、最初に Composer から Opauth ライブラリをインストールする必要があります。 FuelPHP をインストールしたルートで composer.json ファイルに Opauth ライブラリを追加します:

"require": {
	"php": ">=5.3.3",
	"monolog/monolog": "1.5.*",
	"opauth/opauth": "0.4.*",
	"fuelphp/upload": "2.0"
},

Opauth ライブラリ自体に加え、OAuth のプロバイダごとにアプリケーションでサポートしたいストラテジーのパッケージをインストールする必要があります。 Composer パッケージとして何がすぐに利用できるかどうかは Packagist のウェブサイトを確認してください。 仮にあなたが Facebook や Google と Github を使いたいとしましょう。 あなたの composer.json はこのようになります:

"require": {
	"php": ">=5.3.3",
	"monolog/monolog": "1.5.*",
	"opauth/opauth": "0.4.*",
	"opauth/facebook": "dev-master",
	"opauth/google": "dev-master",
	"opauth/github": "dev-master",
	"fuelphp/upload": "2.0"
},

この後、すべてをインストールするには Composer を実行します:

$ cd /data/www/myfuelwebsite
$ php composer.phar update

Opauth は OAuth の認証情報およびローカルユーザアカウントの関係が格納されているデータベーステーブルを必要とします。 Simpleauth または Ormauth のいずれかをインストールしている場合にはテーブルは自動的に作成されます。

設定

Opauth ラッパー認証システムは、設定ファイルを使用して構成されており、予想通り opauth.php を呼び出している。 デフォルトファイルは Auth パッケージで与えられている。 任意の変更を加える前には、app/config フォルダにこのファイルをコピーする必要があります。

下記の設定値が定義されています:

パラメータ デフォルト 説明
link_multiple_providers boolean
true
単一のローカルアカウントへの複数の OAuth プロバイダのリンクをサポートするかどうか。 false に設定されていて、かつプロバイダが既にリンクされている場合に、 2つ目のプロバイダを使用した場合、ユーザへはエラーメッセージが表示されログインが拒否されます。
auto_registration boolean
false
If true, a login via a provider will automatically create a dummy local user account with a random password, if a nickname and an email address is present.
default_group int
1
ユーザーが初めて OAuth プロバイダを利用する時に、ユーザーが意識することなく作成された新しいローカルアカウントに割り当てられるグループ ID 。 デフォルトでは、 Simpleauth での 'users' グループの ID です。
debug boolean
false
true の場合には Opauth ライブラリとストラテジークラス内のデバッグメッセージを有効にします。 プロダクションサイトではこれを有効にしないでください!
security_salt string
null
認証応答の署名鍵のソルトに利用されるランダムな文字列。 定義を必要としており、十分に長く、そして十分にランダムであることを確かめてください!
security_iteration int
300
署名のハッシュを生成するときに使用する繰り返し回数。回数が多いほどより安全な署名鍵となりますが、 しかし、ログイン処理も同様に遅くなります。これは無難なデフォルト値であると思われます。
security_timeout string
'2 minutes'
認証応答が有効と見なされる時間の制限。認証応答の受信と試行が 検証されたときの認証応答の生成 (つまり、コールバックが最初に要求された) 時間を開始とします。 strtotime() と互換性のある任意の値を使用します。
Strategy array
array()
アプリケーションでサポートしているストラテジーのリストには、ストラテジー毎にあなたのアプリケーション ID およびアプリケーションシークレット (として OAuth プロバイダからあなたに割り当てられた) 、そして、その他オプションの設定項目が含まれているでしょう。 これは同じプロバイダに対して複数のストラテジーを定義することができます。 詳細については、このページ を参照してください。

コールバックが来るときの OpAuth 認証ドライバの違いに注意をしてください。例えば、 Facebook は、コールバック (リダイレクト) URL を定義する必要はありませんが、 Twitter は、 http://example.com/<controller>/callback/ のような形で必要となり、 そして、 Google ではこのように: http://example.com/<controller>/<method>/google/oauth2callback ("method" は、インスタンス化している Auth_Opauth ドライバのコントローラの中でのメソッド名) なります。

You should only use auto_registration = 'true' if you don't care about local account, and you don't want to link accounts. It's there for simple "login using " kind of scenario's.

Pay very close attention to the value of default_group. For Ormauth, group id's are not fixed as they are autoincrement in your database table. You don't want to define the wrong one, and ending up giving every OAuth user administrator access!!!