Laravel 5フレームワークはOauth 2を使用する.0
Laravel 5:国内外で有名なPHPフレームワーク.
Oauth2.0:トークン検証メカニズムとしてよく知られているオープンソースソフトウェア.
なぜこの2つを組み合わせたのですか?
主な動機は私がAndroidクライアントを作る必要があることです.これは必然的にサーバーとのインタラクションに関連しています.自分でOauthのToken検証機能を完成するのは難しくありませんが、Oauthがこんなに成熟している以上、自分で書くのは難しいのではないでしょうか.また、私のWebプロジェクトはLaravel 5を使用して開発されたので、私は今Oauthを私のLaravelフレームワークに溶け込む必要があります.
どのように実現しますか?
実は単純にOauth 2.0がLaravelに溶け込むには直接的な方法はありません.例えば、フレームワークは数千万ですが、Oauthはフレームワークごとにチュートリアルを使用する準備はできていませんよね?だからgithubに行って道を探すしかありません.
幸いなことにgithubには本当に解決策があります.もちろん、案は一つではありませんが、私の体験で証明しました.これは比較的すごいです.事前に声明したのは、Laravel 5に内蔵されたMiddlewareを使って実現したものです.もちろん、そうすればもっと柔軟になると思います.
ソリューション:https://bshaffer.github.io/oauth2-server-php-docs/cookbook/laravel/
==================================================================================================================================
華やかな分割線
上のリンクに従って手順に従って一歩一歩インストールしたり、私について下に行ったりすることができます.しかし、やはり壁が割れているので、私について行くことをお勧めします.
==================================================================================================================================
1.composerでoauth 2-server-phpをインストールする
海外のミラーリングが壁にかかっているため、国内のミラーリングはまだ安定していません.私の知っている限りでは、国内には現在2つのミラーが使用できますが、1つが使えない場合はもう1つを使用することができます.
2.Oauth関連テーブル移行の作成
プロジェクトルートで実行
このコマンドを実行すると、database/migrations/ディレクトリの下に現在の日付で始まるcreate_が生成されます.oauth_tablesが終わるphpファイルを開き、次のコードを入力して保存します.
保存後、terminalはプロジェクトルートディレクトリに切り替え、次のコマンドを実行します.
コマンドを実行すると、データベースにoauthの先頭にあるデータテーブルがたくさん表示されます.
3.新規seeds
Database/seeds/ディレクトリの下にOAuthClientsSeederという名前の2つのファイルを新規作成します.phpとOAuthUsersSeeder.phpファイル、次のコードに書き込む
OAuthClientsSeeder.php
OAuthUsersSeeder.php
保存終了後、プロジェクトルートディレクトリに切り替え、以下のコマンドを実行し、composerの構成を自動的にロードします.
次のコマンドを実行して、新しい2つのシードOAuthClientsSeederを作成します.phpとOAuthUsersSeeder.phpはいくつかのデータを挿入してデータベースに入ります
これはoauthを発見しますusersとoauth_Clientsの2つのテーブルにはそれぞれ1つのデータが挿入されています.
4.routeMiddleware構成
app/Http/Kernelを開きます.phpは、クライアントが無状態でHTMLフォームの_token変数なので、Csrfの検証を無効にする必要があります.
$routeMiddlewareに行を追加し、'oauth'=>'AppHttpMiddlewareOauthMiddleware'を実装します.このチュートリアルでは、requestとcontrollerの間にmiddlewareを追加してTokenの検証メカニズムを実装したいため、この行を追加した後、次のようにOauthMiddlewareというミドルウェアを追加する必要があります.
修正後のKernel.phpファイルは次のとおりです.
ミドルウェアの追加
App/Http/Middlewareディレクトリの下に新しいOauthMiddlewareを作成します.phpファイル、以下のコードを保存します.
5.routeルーティング構成
appを開きます.Http/routes.phpに次のコードが追加されました.Pdo接続データベースのusernameとpasswordの変更に注意してください.
==================================================================================================================================
また華やかな分割線
OK、上は基本的な配置ですが、下は使う必要があります.
==================================================================================================================================
1.Tokenの取得
要求サーバー、ルートはoauth/tokenでTokenを得る
2.一部のAPIはTokenを検証する必要があり、一部のAPIはTokenを検証する必要がない場合はどうすればいいですか?
middlewareを追加したことを忘れないでください.
Tokenのルートを検証する必要はありません.どう書きますか?
Tokenのルーティングを検証するにはどう書きますか?
==================================================================================================================================
また華やかな分割線
欠点!!!気をつけてください!!!
==================================================================================================================================
1.結局このOauth 2.0は海外の製品で、多くのヒントが英語なのか、oauth 2-server-phpのソースコードを変更する必要があるかもしれません.
2.言語のほかに、もう一つはOauth 2.0の認証方式は、すでに一定のユーザがいる場合には適していないため、ウェブサイトの既存のユーザのデータをoauth_に同期する必要がある.アクセスなどのデータテーブルでのみ可能です.
転載する場合は、出典を明記してください.ご協力ありがとうございます.
Oauth2.0:トークン検証メカニズムとしてよく知られているオープンソースソフトウェア.
なぜこの2つを組み合わせたのですか?
主な動機は私がAndroidクライアントを作る必要があることです.これは必然的にサーバーとのインタラクションに関連しています.自分でOauthのToken検証機能を完成するのは難しくありませんが、Oauthがこんなに成熟している以上、自分で書くのは難しいのではないでしょうか.また、私のWebプロジェクトはLaravel 5を使用して開発されたので、私は今Oauthを私のLaravelフレームワークに溶け込む必要があります.
どのように実現しますか?
実は単純にOauth 2.0がLaravelに溶け込むには直接的な方法はありません.例えば、フレームワークは数千万ですが、Oauthはフレームワークごとにチュートリアルを使用する準備はできていませんよね?だからgithubに行って道を探すしかありません.
幸いなことにgithubには本当に解決策があります.もちろん、案は一つではありませんが、私の体験で証明しました.これは比較的すごいです.事前に声明したのは、Laravel 5に内蔵されたMiddlewareを使って実現したものです.もちろん、そうすればもっと柔軟になると思います.
ソリューション:https://bshaffer.github.io/oauth2-server-php-docs/cookbook/laravel/
==================================================================================================================================
華やかな分割線
上のリンクに従って手順に従って一歩一歩インストールしたり、私について下に行ったりすることができます.しかし、やはり壁が割れているので、私について行くことをお勧めします.
==================================================================================================================================
1.composerでoauth 2-server-phpをインストールする
composer require bshaffer/oauth2-server-php
composer require bshaffer/oauth2-server-httpfoundation-bridge
海外のミラーリングが壁にかかっているため、国内のミラーリングはまだ安定していません.私の知っている限りでは、国内には現在2つのミラーが使用できますが、1つが使えない場合はもう1つを使用することができます.
2.Oauth関連テーブル移行の作成
プロジェクトルートで実行
php artisan db:migrate create_oauth_tables
このコマンドを実行すると、database/migrations/ディレクトリの下に現在の日付で始まるcreate_が生成されます.oauth_tablesが終わるphpファイルを開き、次のコードを入力して保存します.
", $schema) as $statement) {
DB::statement($statement);
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
DB::statement('DROP TABLE oauth_clients, oauth_access_tokens, oauth_authorization_codes, oauth_refresh_tokens, oauth_users, oauth_scopes, oauth_jwt');
}
}
保存後、terminalはプロジェクトルートディレクトリに切り替え、次のコマンドを実行します.
php artisan migrate
コマンドを実行すると、データベースにoauthの先頭にあるデータテーブルがたくさん表示されます.
3.新規seeds
Database/seeds/ディレクトリの下にOAuthClientsSeederという名前の2つのファイルを新規作成します.phpとOAuthUsersSeeder.phpファイル、次のコードに書き込む
OAuthClientsSeeder.php
insert(array(
'client_id' => "testclient",
'client_secret' => "testpass",
'redirect_uri' => "http://fake/",
));
}
}
OAuthUsersSeeder.php
insert(array(
'username' => "bshaffer",
'password' => sha1("brent123"),
'first_name' => "Brent",
'last_name' => "Shaffer",
));
}
}
保存終了後、プロジェクトルートディレクトリに切り替え、以下のコマンドを実行し、composerの構成を自動的にロードします.
composer dump-autoload
次のコマンドを実行して、新しい2つのシードOAuthClientsSeederを作成します.phpとOAuthUsersSeeder.phpはいくつかのデータを挿入してデータベースに入ります
php artisan db:seed
これはoauthを発見しますusersとoauth_Clientsの2つのテーブルにはそれぞれ1つのデータが挿入されています.
4.routeMiddleware構成
app/Http/Kernelを開きます.phpは、クライアントが無状態でHTMLフォームの_token変数なので、Csrfの検証を無効にする必要があります.
$routeMiddlewareに行を追加し、'oauth'=>'AppHttpMiddlewareOauthMiddleware'を実装します.このチュートリアルでは、requestとcontrollerの間にmiddlewareを追加してTokenの検証メカニズムを実装したいため、この行を追加した後、次のようにOauthMiddlewareというミドルウェアを追加する必要があります.
修正後のKernel.phpファイルは次のとおりです.
'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'csrf' => 'App\Http\Middleware\VerifyCsrfToken',
'oauth'=> 'App\Http\Middleware\OauthMiddleware',
];
}
ミドルウェアの追加
App/Http/Middlewareディレクトリの下に新しいOauthMiddlewareを作成します.phpファイル、以下のコードを保存します.
input('access_token')){
return response( 'Token not found', 422);
}
$req = \Symfony\Component\HttpFoundation\Request::createFromGlobals();
$bridgeRequest = OAuthRequest::createFromRequest($req);
$bridgeResponse = new \OAuth2\HttpFoundationBridge\Response();
if(!$token = App::make('oauth2')->getAccessTokenData($bridgeRequest, $bridgeResponse)){
$response = App::make('oauth2')->getResponse();
if($response -> getParameter('error') == 'expired_token'){
return response('The access token provided has expired', 401);
}
return response('Invalid Token.', 422);
} else {
$request['user_id'] = $token['user_id'];
}
return $next($request);
}
}
5.routeルーティング構成
appを開きます.Http/routes.phpに次のコードが追加されました.Pdo接続データベースのusernameとpasswordの変更に注意してください.
App::singleton('oauth2', function() {
$storage = new OAuth2\Storage\Pdo(array(
'dsn' => 'mysql:dbname=ishare_school;host=localhost', 'username' => 'root', 'password' => env('DB_PASSWORD', '')));
$server = new OAuth2\Server($storage);
$server->addGrantType(new OAuth2\GrantType\ClientCredentials($storage));
$server->addGrantType(new OAuth2\GrantType\UserCredentials($storage));
return $server;
});
Route::get('oauth/token', function()
{
$bridgedRequest = OAuth2\HttpFoundationBridge\Request::createFromRequest(Request::instance());
$bridgedResponse = new OAuth2\HttpFoundationBridge\Response();
$bridgedResponse = App::make('oauth2')->handleTokenRequest($bridgedRequest, $bridgedResponse);
return $bridgedResponse;
});
==================================================================================================================================
また華やかな分割線
OK、上は基本的な配置ですが、下は使う必要があります.
==================================================================================================================================
1.Tokenの取得
要求サーバー、ルートはoauth/tokenでTokenを得る
2.一部のAPIはTokenを検証する必要があり、一部のAPIはTokenを検証する必要がない場合はどうすればいいですか?
middlewareを追加したことを忘れないでください.
Tokenのルートを検証する必要はありません.どう書きますか?
Route::post('veirfycode', 'Api\UserController@veirfyCode');
Tokenのルーティングを検証するにはどう書きますか?
Route::post('addpasswd' , ['middleware' => 'oauth', 'uses'=>'Api\UserController@addPassword']);
==================================================================================================================================
また華やかな分割線
欠点!!!気をつけてください!!!
==================================================================================================================================
1.結局このOauth 2.0は海外の製品で、多くのヒントが英語なのか、oauth 2-server-phpのソースコードを変更する必要があるかもしれません.
2.言語のほかに、もう一つはOauth 2.0の認証方式は、すでに一定のユーザがいる場合には適していないため、ウェブサイトの既存のユーザのデータをoauth_に同期する必要がある.アクセスなどのデータテーブルでのみ可能です.
転載する場合は、出典を明記してください.ご協力ありがとうございます.