セッションCookieによる認証
JWT + ローカルストレージによる認証方式はローカルストレージを例えば自ドメイン以外のJSで簡単に抜かれる可能性があるのでセキュアとは言えない。
基本的にはサーバーサイドでセッションIDを発行してhttp-onlyなCookieに持たせてクライアントとのAPIのやりとりを行う古典的なやり方が良い。JWTはあんまり使いたくない感じ。
Next.js -> Next.js API -> Firebase Admin SDKでの実装。Firebase使うときはこれでも良さそう。自前で認証及びAPIサーバーをバックエンドに持つならNext.js -> APIサーバーで良さそう。 例えばSPAで構築する場合、フロントエンドはVercelやCloudflare Pagesなんかがあり、割とデプロイに関して楽が出来るしPricingも悪くない。ただしAPIを提供するバックエンドが必要になると事情が変わる。HerokuやApp EngineやCloud Runを利用するとCloud SQLやRDS、Herokuだとnodeの追加など必ずお金がかかる。しかもそれなりのパフォーマンスと安定性を得ようと思うなら数万円は覚悟しないといけない。