0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel8.x Sanctum とは

Last updated at Posted at 2022-05-12

Laravel API認証サービス Sanctumについて

~ はじめに ~

まずLaravelが用意しているAPI認証はいくつか存在します。

・標準

- Basic認証

auth.basicミドルウェアを利用してBasic認証をすることが可能です。
onceBasicメソッドを利用すれば、ステートレスなBasic認証も可能になります。

・API認証系ライブラリ

- Passport

OAuth2.0による認可、認証のための認可サーバ実装を簡単にできるようにしてくれます。

- Sanctum (今回のメイン)

7.x では「Airlock」だった
トークンベースの認証、クッキーベースの認証など、軽めの認証システムを提供してくれます。
バックエンドにLaravelを使うSPAや、モバイルアプリ作成に向けたもの。

~ Sanctum ~

・インストール

  • composerでインストール
composer require laravel/sanctum
  • Sanctumの設定ファイルとmigrationファイルを vendor:publish artisanコマンドで生成
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
  • 最後にAPIトークンを記録するテーブルを生成
php artisan migrate

・概要

Sanctumは以下三つの認証を提供しています。

APIトークン認証

Bearer認証方式、つまりTokenベースの認証方式です。

createToken メソッドによりトークンを発行でき、ハッシュ化して事前に用意したDBに保存されます。

public function createToken(string $name, array $abilities = ['*'])
{
    $token = $this->tokens()->create([
        'name' => $name,
        'token' => hash('sha256', $plainTextToken = Str::random(40)),
        'abilities' => $abilities,
    ]);

    return new NewAccessToken($token, $token->id.'|'.$plainTextToken);
}

plainTextToken メソッドを使えばプレーンテキスト値を取得でき、クライアント側に送信できます。

$token = $request->user()->createToken($request->token_name);
return ['token' => $token->plainTextToken];

あとは「Bearer」トークンとして「Authorization」ヘッダに含めて返せば、認証をしてくれます。

ただどのルートを保護するかは設定しておく必要があります。
以下のようにミドルウェアを通せば、認証してくれます。

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

特にセッションに関して設定を変えていないのであれば、
web.php に配置した場合は、LaravelにもとからあるセッションのCookie認証を最初に行います。
Cookieが送られてこなければ、APIトークン認証をするという形になります。

また別の認証ライブラリJetstreamをインストールすればこの作業自体も必要なくなるみたいです。

SPA認証

Cookieベースのセッション認証
Laravel標準で使われているセッション認証をAPI認証でも利用します。

セッションを利用するので、sanctum設定ファイルのstateful設定で明示されたドメインに限り、
CORS設定を行い、異なるサブドメインでもステートフルな処理が可能になります。
またCSRF対策も行ってくれます。

具体的な処理は書きませんが流れとしては

  1. /sanctum/csrf-cookie にリクエストを送り、CSRFトークンを返してもらう。
  2. /api/login に認証情報をPOSTリクエスト
  3. 認証されsessionトークンがでステートフルな処理が可能になる。

・モバイルアプリケーション認証

モバイルアプリケーションからのリクエストをトークン認証します。
基本的な流れはAPIトークン認証です。

~ 最後に ~

LaravelライブラリSanctumについてでした。
細かい実装方法等は、ライブラリを参照してください。
認可、認証系の話題は奥が深いなと感じました、、、触れるにはまだ早かったかもしれない、、

参考:
https://qiita.com/pikanji/items/040fa4ab6976059f3762
https://webxreal.com/laravel-sanctum-spa/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?