理系公務員のプログラミング日記

【Laravel9】Laravelの認証ライブラリまとめ

タグ:
Laravel

認証・認可について

ログインやセッションなどの認証やユーザーに権限を与える認可はアプリケーションのセキュリティを担う重要な機能です。

認証機能に必要な機能は、ログイン、新規登録、メール検証、2段階認証、セッション管理、APIトークン管理などがあります。

これらは自力で実装することも可能ですが、それらを実装するのは大変な作業です。

そのため、Laravelでは認証機能を実装するためのライブラリを提供しています。

主な認証系の主なライブラリは以下の通りです。

  • Laravel auth
  • Laravel ui
  • Laravel JetStream
  • Laravel Breeze
  • Laravel Fortify
  • Laravel Sanctum
  • Laravel Socialite

多いな

参考 Laravel公式ドキュメント

Qiita:Laravel の認証・認可パッケージが多すぎてわけわからんので図にまとめた

Laravel auth

Laravel本体のlaravel/framework/illuminate/authには、認証・認可の機能が集約されています。

Socialite以外のすべてのパッケージはこのauthを利用しています。

このauthは以前は単独で利用することがありましたが、現状は他のパッケージを介して利用することが多いです。

authが提供する主な機能は以下のとおりです

  • ・Basic認証(ユーザー名とパスワードを利用した認証)
  • ・Cookieによるセッション管理
  • ・メールアドレス検証機能(登録時にメールアドレスに確認メールを送信)
  • ・パスワードリセット機能
  • ・シンプルな認可機能(ユーザーの権限を管理)

Laravel ui

Laravel ui は、Laravel が提供する認証機能を実装するための最も簡単なライブラリです。

authを用いたバックエンドの仕組みだけでなく、ログイン画面や会員登録画面などのフロントエンドの実装も提供しています。

これらのフロントエンドの実装は以下の3つから選ぶことができます。

  • ・Bootstrap
  • ・Vue
  • ・React

以前まではこのuiを利用していたのですが、Laravel8からuiは非推奨となりました。

Laravel JetStream

Laravel JetStream は、Laravel8からの標準の認証機能のライブラリです。

JetStreamはログイン、新規登録、メール検証、2段階認証、セッション管理、APIトークン管理などの様々な機能を提供しています。

また、CSSフレームワークとしてTailwindを利用しています。

かなり多くの機能を提供している一方で、利用する難易度が高いのが特徴です。

Laravel Breeze

Laravel Breeze は、複雑であったJetStreamをシンプルにしたライブラリで現在最も新しいものです。

シンプルになった分利用する難易度は低いため、公式からもまずはBreezeを利用してみることを推奨しています。

(個人的には覚えること多すぎてこれでシンプルなのか?という感じですが)

Breezeは以下の4種類のテンプレートから実装を選ぶことができます。 (CSSフレームワークはTailwindを使用しています)

  • ・Blade
  • ・Vue
  • ・React
  • ・API

このうちBreezeのテンプレートとしてのVueとReactはInertia.jsを内部で利用しています。「イナーシャ」と読みます。

Inertia.jsは、VueやReactを利用してフロントエンドを実装する際に、サーバーサイドとフロントエンドの間でデータをやり取りするためのライブラリです。また、Vue-Routerのようなルーティングライブラリをサーバーサイドで実装することができます。

これはデータの受け渡しをサーバーサイドで行うことで、フロントエンドの実装をシンプルにすることができますが、一方でフロントエンドとサーバーサイドを分離させるという昨今のトレンドとは反するものです。

このテンプレートを使うと、フロントエンドの実装をサーバーサイドで行うことができるため、フロントエンドの実装を行う人材を必要としないようなシステムの開発に向いています。

Laravel Fortify

Laravel Fortify は、JetStreamのように多くの機能を提供するライブラリではなく、フロントエンドの実装は行わず、バックエンド側の認証機能のみを提供するという点が特徴のライブラリです。

JetStreamは内部的にはこのFortifyを利用しています。

フロントエンドの実装は自前で行う必要があるので導入当初は手間がかかりますが、自由にフロントエンドを実装することができます。

Fority(とそれを内部で利用しているJetStream)は、MFA認証が利用できます。

MFA認証とは、ユーザーがログインする際に、パスワードだけでなく、認証アプリなどの二段階認証を利用して認証することを指します。

Laravel Sanctum

Laravel Sanctum は、APIトークン管理機能を提供するライブラリです。

Laravel8.6からは、Laravelに標準でインストールされています。

APIトークン管理機能とは、楽天APIなどのように、APIを利用する際にどのユーザーからのAPIアクセスかを判別するための認証情報としてトークンを利用するための機能です。

外部からAPIを利用する際に、ユーザー名とパスワードを利用して認証するのではなく、トークンを利用して認証することで、セキュリティを高めることができます。

sanctumはLaravelとSPA(Single Page Application)を利用してフロントエンドを実装する際に利用することが多いです。

Laravel Socialite

Laravel Socialite は、OAuth認証を実装するためのライブラリです。

OAuth認証とは、外部サービスに認証を委託し、アプリケーション側ではユーザー情報だけを管理する仕組みです。

いわゆるソーシャルログインと呼ばれる機能で、GoogleやTwitterなどの外部サービスのアカウントを利用してログインする機能を実装する際に利用します。

OAuth認証の動作についての解説はこれがわかりやすかったです。 Qiita:一番分かりやすい OAuth の説明

どのライブラリを利用するか

Laravelの認証機能を実装する際には、どのライブラリを利用するかを考える必要があります。

どのライブラリを利用するかは、どのようなシステムを開発するかによって異なります。

システムの開発には、フロントエンドの実装をサーバーサイドで行うかという点が大きく影響します。

フロントエンドの実装をサーバーサイドで行う場合は、Inertia.jsを利用することが多いです。

Inertia.jsを利用する場合は、BreezeのVueやReactのテンプレートを利用することが多いです。

Inertia.jsを利用しない場合は、BreezeのBladeテンプレートを利用することが多いです。

また、フロントエンドの実装をサーバーサイドで行わない場合は、SPA(Single Page Application)を利用するかという点も大きく影響します。

SPAを利用する場合は、Laravel Sanctumを利用することが多いです。

SPAを利用しない場合は、Laravel Sanctumを利用する必要はありません。

また、OAuth認証を利用するかという点も大きく影響します。

OAuth認証を利用する場合は、Laravel Socialiteを利用することが多いです。

OAuth認証を利用しない場合は、Laravel Socialiteを利用する必要はありません。

以上のように、どのライブラリを利用するかは、どのようなシステムを開発するかによって異なります。