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 パッケージとの最初の出会いならば、最初に Simpleauth と Ormauth のセクションを確認し、どちらを利用するか決定し、指示に従ってインストールしてください。 一旦それをしたならば、ここに戻り読み進めてください。
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 |
|
単一のローカルアカウントへの複数の OAuth プロバイダのリンクをサポートするかどうか。 false に設定されていて、かつプロバイダが既にリンクされている場合に、 2つ目のプロバイダを使用した場合、ユーザへはエラーメッセージが表示されログインが拒否されます。 |
auto_registration | boolean |
|
true の場合、ニックネームとメールアドレスが存在するのであれば、 プロバイダ経由でのログインは自動的にランダムなパスワードを使用しダミーのローカルユーザーアカウントが作成されます。 |
default_group | int |
|
ユーザーが初めて OAuth プロバイダを利用する時に、ユーザーが意識することなく作成された新しいローカルアカウントに割り当てられるグループ ID 。 デフォルトでは、 Simpleauth での 'users' グループの ID です。 |
debug | boolean |
|
true の場合には Opauth ライブラリとストラテジークラス内のデバッグメッセージを有効にします。 プロダクションサイトではこれを有効にしないでください! |
security_salt | string |
|
認証応答の署名鍵のソルトに利用されるランダムな文字列。 定義を必要としており、十分に長く、そして十分にランダムであることを確かめてください! |
security_iteration | int |
|
署名のハッシュを生成するときに使用する繰り返し回数。回数が多いほどより安全な署名鍵となりますが、 しかし、ログイン処理も同様に遅くなります。これは無難なデフォルト値であると思われます。 |
security_timeout | string |
|
認証応答が有効と見なされる時間の制限。認証応答の受信と試行が 検証されたときの認証応答の生成 (つまり、コールバックが最初に要求された) 時間を開始とします。 strtotime() と互換性のある任意の値を使用します。 |
Strategy | array |
|
アプリケーションでサポートしているストラテジーのリストには、ストラテジー毎にあなたのアプリケーション ID およびアプリケーションシークレット (として OAuth プロバイダからあなたに割り当てられた) 、そして、その他オプションの設定項目が含まれているでしょう。 これは同じプロバイダに対して複数のストラテジーを定義することができます。 詳細については、このページ を参照してください。 |
コールバックが来るときの OpAuth 認証ドライバの違いに注意をしてください。例えば、 Facebook は、コールバック (リダイレクト) URL を定義する必要はありませんが、 Twitter は、 http://example.com/<controller>/callback/ のような形で必要となり、 そして、 Google ではこのように: http://example.com/<controller>/<method>/google/oauth2callback ("method" は、インスタンス化している Auth_Opauth ドライバのコントローラの中でのメソッド名) なります。
ローカルアカウントに関心がなく、アカウントにもリンクしたくない場合にのみ、 auto_registration = 'true' を利用すべきです。 これは、「 <プロバイダ> を使用してログイン」のための簡素なシナリオのような物です。
とくに default_group の値に細心の注意を払いましょう。Ormauth の場合、データーベーステーブルでは group id は固定ではなく自動インクリメントされます。間違ったものを定義すると、管理者へのアクセス権をすべての OAuth ユーザーに与えることになります!!!