May 18, 2014

LaravelでOAuth2プロバイダを作ってみる

2014-05-18 追記:
このサンプルでは、OAuth2のプロバイダとクライアントが共存しています。また、飽くまで処理フローを確認するための簡単なサンプルですので、適宜、プロジェクトを分けたり、バックグラウンド処理にするなどの工夫が必要になります。

--

たぶん、初Laravelネタです。

"oauth2-server-laravel"という、OAuth2プロバイダ(クライアントではない)用のパッケージがあったので、試してみました。
https://github.com/lucadegasperi/oauth2-server-laravel

このパッケージは、以下のライブラリをLaravel用にラップしているようです。
https://github.com/thephpleague/oauth2-server

また、今回作成したサンプルプロジェクトを、GitHubにアップしてあります。
https://github.com/mamor/laravel-oauth2-server-sample
このサンプルプロジェクトは、以下の手順で動かせます。

ソースをインストールします。
$ git clone https://github.com/mamor/laravel-oauth2-server-sample.git
$ cd laravel-oauth2-server-sample
$ composer install
次に、app/config/database.phpを正しく設定します。また、app/config/app.phpの"url"をブラウザからアクセスするURLに変更します。後述のシーダと、フォームの初期値で使用している為です。私の手元の環境(掲載しているキャプチャ)では"http://192.168.33.10/oauth2"になっています。

インストールと設定が済んだら、以下の順でマイグレーションを実行します。
$ php artisan migrate --package="lucadegasperi/oauth2-server-laravel"
$ php artisan migrate --seed
トップ画面にアクセスすると、(リダイレクトされて)ログイン画面が表示されます。
以下でログインできます。
email: your-email@example.com
password: password

ログインに成功すると、OAuth2認証用のフォームが表示されます。必要な値はセットされているので、そのまま送信ボタンを押してOKです。

OAuth2認証に成功すると"code"値が付いて"/callback"にリダイレクトされます。この画面は、access_tokenを発行するためのフォームです。この画面でも、必要な値はセットされているので、そのまま送信ボタンを押してOKです。

access_tokenが発行されました。

試しに、各scopeにアクセスしてみます。

/scope1?access_token={発行されたアクセストークン}

/scope2?access_token={発行されたアクセストークン}

/scope3?access_token={発行されたアクセストークン}

scope3だけがエラーになればOKです。前述のリクエストで"scope"値を"scope1,scope2"としている為です。

ソース周りは https://github.com/mamor/laravel-oauth2-server-sample/commits/master をご覧頂ければと思います。

細かな機能はまだ把握できていませんが、OAuth2そのものの仕様と、冒頭に記載したOAuth2ライブラリの説明やソースを確認しながら。という感じでしょうか。

以上です。

No comments:

Post a Comment