2017-04-13

Laravel PassportのAPI認証で利用するCookieの名称を変更する方法

LaravelでAPIを実装・構築後、API認証(Passport)を利用した上で、更に自身のJavaScript(同一サーバー)から構築したAPIを利用したい場合、CreateFreshApiTokenミドルウェアを利用することで簡単にAPIを利用できるようになります。

同一サーバーから構築したAPIを利用するのに、わざわざOAuth認証を経由するのは面倒です。

そこで、CreateFreshApiTokenミドルウェアは、laravel_tokenという名称のCookieを、送信するレスポンスへ付加します。このCookieは、JavaScriptアプリケーションからのAPIリクエストを認可するために使用する、暗号化されたJWTを含んでいます。

そのため、OAuthの手順を踏むことなく、APIへのリクエストを作成できるようになります。(別途X-CSRF-TOKENヘッダー及びX-Requested-Withヘッダーは必要です。)

この方法を利用する場合、デフォルトでは認可に利用するCookieの名称はlaravel_tokenに固定されています。いかにも「Laravel使ってます!」みたいな名称で気に食わないので、今回はその名称を変更する方法を紹介します。

実装方法

Laravelアプリケーションのapp/Providers/AuthServiceProvider.phpAuthServiceProviderクラスのboot()メソッドへ、以下のように記述を追加します。

<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Passport\Passport;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Passport::cookie('api_token');  // 追加
        Passport::routes();
    }
}

通常、Passportを導入した段階でPassport::routes()メソッドが呼ばれるように記述されているはずなので、その付近に追加するとわかりやすいでしょう。

boot()メソッド内部でPassport::cookie()メソッドを呼び出し、Cookieの名称を新たにセットしています。上記の例では'api_token'という文字列が設定されていますが、任意の好きなCookieの名称を設定するといいでしょう。

以上で完了です。

ドキュメントのどこにも記載されていなかったので手軽に実装できないのではないかと思いましたが、非常に簡単に実装できました。

まとめ

今回は、Laravel PassportのAPI認証で利用するCookieの名称を変更する方法を紹介しました。

詳しいLaravel Passportの利用方法については、ドキュメントを参照ください。