LaravelのAPIで利用する認証パターンまとめ

バックエンドにLaravelを使用しSPAを作成したい場合、認証の実装に悩んで色々調べたのでまとめます。

認証の実装パターン

tymondesigns/jwt-auth

バック、フロントともに簡単に使える。
Laravel公式ではないが、初心者向けのチュートリアルでの事例が多いので迷うことはないと思う。
ドキュメントは少し情報が少ないので、カスタマイズは難しいかもしれない。

このライブラリではなくJWTを利用する上で運用上リスクもあるので、興味ある人は以下のブログを参照。

JWT認証、便利やん? - ブログ
どうして JWT をセッションに使っちゃうわけ? - co3k.org に対して思うことを書く。 (ステートレスな) JWT をセッションに使うことは、セッション ID を用いる伝統的なセッション機構に比べて、あらゆるセキュリティ上のリスクを負うことになります。 と大口叩いておいて、それに続く理由がほとんどお粗末な運用...
どうしてリスクアセスメントせずに JWT をセッションに使っちゃうわけ? - co3k.org
JWTを認証用トークンに使う時に調べたこと - Carpe Diem
概要 JWTを認証用トークンに使う時に調べたことをまとめます。 JWTとは 以下のフォーマットです。 {base64エンコードしたheader}.{base64エンコードしたclaims}.{署名} 以下の特徴があります。 発行者が鍵を使ってJSONを署名(or HMAC)し、トークンとして扱う。 暗号化ではないので、...

懸念点

  • Laravel公式のライブラリではない
  • 従来のセッション方式より、考えることが多い

Laravel Passport

公式で紹介されている方法。OAuthサーバー上に構築されているというこで、OAuth2の機能が簡単に実装可能。
外部にAPIを公開することがないならJWTを使った方が、実装はお手軽。

API認証(Passport) 5.4 Laravel

api_tokenの利用

あまり情報がないので、採用している人は少ないと思われる。
サーバー側にtokenを保存している既存のシステムからLaravelに移行する場合などは、この方法でスマートに移行できるかもしれない。

[Laravel] Token認証で利用するキー(api_token)の名前を変更する - YoheiM .NET
こんにちは、@yoheiMuneです。Laravelで、Ajax向けのAPIを作る場合に、トークン認証を使うことが個人的に多いのですが、Laravelのデフォルトのトークン認証をカスタマイズする機会があったので、それをブログに載せたいと思います。

従来のセッション方式の利用

ステートフルだが実績のあるセッションを使った方式。
通常APIではクッキーやセッションが使われないようになっているが、それを有効にすることで従来のログインをAPI経由で行う。
以下の2サイトで実装方法が紹介されている。

tokenをローカルストレージに保存しないので、XSSで簡単にtokenが盗まれるリスクはない。

Vue + Vue Router + Vuex + Laravelで写真共有アプリを作ろう (4) 認証API | Hypertext Candy
この連載記事では、フロントエンドに Vue.js + Vue Router + Vuex とサーバーサイドに Laravel を使用したシングルページ Web アプリケーションの開発方法を紹介します。
LaravelでセッションIDで認証状態をチェックするステートフルなAPIを使う - Qiita
Laravelは標準でAPI用のルーティングなり設定が用意されています。 しかしこれらの設定はトークンを利用して認証状態をチェックするものでありステートレスであることが前提となっています。 サーバサイドでレンダリングして、一部分だけち...

まとめ

簡単なサイトまたはJWTを正しく運用できる場合は、tymondesigns/jwt-auth。
将来的にOAuthを使う可能性がある場合、公式サポートの安心感が欲しい場合はPassport。
既存サイトからの移行や、tokenをサーバー側で管理したい場合はapi_token方式。
token使いたくない、従来の認証パターンを使いたい場合はセッション方式。

以上。その他の方法や、間違っている説明などあればコメントいただけるとありがたいです。

コメント