Laravelを使った認証方法をいくつかあるようですが、Passportパッケージを使ったAPI認証の構築にチャレンジしてみます。
今回は、Facebook APIやTwitter APIのようなAPIを介してサービスを提供する側の認証や、vue.jsなどWebアプリを構築する際にサーバサイドへのアクセスに認証を設けるケースを想定します。
ちなみに、構築した環境は以下の通りです。
- Windows 11 Home
- PHP 7.3.33
- Laravel 6.20.44
Passportパッケージをインストールと設定
Composerを使ってPassportパッケージをインストールします。私の場合、Laravel 6.xが最新のpassport 10.xに対応していないようだったので、一つバージョンを落としてインストールしました。
> composer require laravel/passport "^9.0"
次に、migrateを実行して、認証情報を保持するテーブルを作成します。
> php artisan migrate
Migrating: 2016_06_01_000001_create_oauth_auth_codes_table
Migrated: 2016_06_01_000001_create_oauth_auth_codes_table (0.06 seconds)
Migrating: 2016_06_01_000002_create_oauth_access_tokens_table
Migrated: 2016_06_01_000002_create_oauth_access_tokens_table (0.03 seconds)
Migrating: 2016_06_01_000003_create_oauth_refresh_tokens_table
Migrated: 2016_06_01_000003_create_oauth_refresh_tokens_table (0.03 seconds)
Migrating: 2016_06_01_000004_create_oauth_clients_table
Migrated: 2016_06_01_000004_create_oauth_clients_table (0.01 seconds)
Migrating: 2016_06_01_000005_create_oauth_personal_access_clients_table
Migrated: 2016_06_01_000005_create_oauth_personal_access_clients_table (0.01 seconds)
次に、例えばsample@helog.jpなどのユーザを追加します。
追加する方法はいくつかありますが、今回はお手軽なtinkerコマンドを使います。tinkerコマンドを使うと、コントローラ内のプログラムなどをコマンドラインから対話形式で実行できます。
> php artisan tinker
>>> App\User::create(['name' => 'sample', 'email' => 'sample@helog.jp', 'password' => bcrypt('xxxxxxxx')]);
=> App\User {
name: "sample",
email: "sample@helog.jp",
updated_at: "2019-04-14 16:07:43",
created_at: "2019-04-14 16:07:43",
id: 1,
}
次に、passport:clientコマンドを実行して、アクセストークンを取得するためにのIDとクライアントシークレットキーを取得します。
ここで生成されたクライアントIDとクライアントシークレットキーはメモしておきます。