Supabase Authが開発者の жизньを楽にする理由、そして単なるGoTrueクローンではない理由
新しいプロジェクトを始めると、登録、パスワードリセット、メール認証の設定をまた一からやらないといけない、あのうんざりする感を経験したことがあるでしょう?100回目でも。それでもFirebaseやSupabase Cloudのような готовые サービスを使った方が楽だと感じることもあるでしょう。しかし、プロジェクトによってはデータへの完全なコントロールが必要な場合や、クローズドな環境でクラウドソリューションがセキュリティ監査に通らないこともあります。そこでSupabase Authの出番です — ホームサーバーでもインダストリアルクラスターでも動かせるGoベースの認証サーバーです。
一体 무엇인가
Supabaseエコシステムを使ったことがある方なら、おそらくそのAuthを利用したことがあるでしょう。しかし、それが独立して動作する個別のオープンソースマイクロサービスであることはあまり知られていません。チームは元々はNetlifyのGoTrueプロジェクトをベースにしていましたが、過去数年間で大きく分岐が進み、今はまるで別のプロジェクトとなっています。
Supabase AuthはJWTトークンを発行し、ユーザーを管理し、PostgreSQLのRow Level Security(RLS)とシームレスに連携します。本質的には、フロントエンドとデータベースの間の架け橋となり、身份確認のすべての面倒を見てくれます。
実際のところ 무엇が優れているのか
このプロジェクトの最大の魅力は、モダンなウェブの要件のほとんどを箱から出してすぐに使える点です。GoogleやAppleでのログインを実装するのに、一行もコードを書く必要がありません。
パスワード不要ログイン
マジックリンクやSMS OTPコードはすでに標準となっています。Supabase Authはこれをデフォルトでサポートしています。ユーザーがメールアドレスを入力し、リンクを受け取り、クリックすればシステムにログインできます。モバイルアプリ向けには、TwilioやMessagebirdなどのプロバイダーを通じた電話番号ログインもサポートされています。
豊富なOAuthプロバイダー
12以上のプロバイダーが利用可能です:Google、Facebook、GitHubなどの定番から、Discord、Notion、Slack、より専門的なEnterpriseニーズ向けのWorkOSまで。設定はClient IDとSecretを含む数個の環境変数を追加するだけで完了します。
リフレッシュトークンローテーション
これは重要なセキュリティ機能です。サーバーは古いリフレッシュトークンの再利用を検出できます。誰かがトークンを盗み出して交換しようとすると、システムはこれを検出し、そのユーザーのセッションチェーン全体を無効化します。この小さな詳細が重大なインシデントを防ぎます。
PostgreSQL互換性
プロジェクトがSupabase内で始まったことから、PostgreSQLに最適化されています。単にユーザーをテーブルに保存するだけでなく、複雑な行レベルのアクセス制御ロジックを有効にします。データベースへのすべてのAPIリクエストでuser_idをチェックする必要はありません — Postgresが自動的に、このサーバーが発行したJWTに基づいて処理を行います。
内部動作の仕組み
このプロジェクトはGoで書かれており、非常に軽量で高速です。実行にはPostgreSQLデータベースのみが必要です。
マイグレーションに関する興味深い点として、バイナリ起動時に自動的に適用されます。これはDockerコンテナにとって便利です — イメージをアップデートして再起動すれば、データベースの準備完了です。
セルフホストを決意した場合、Dockerで素早く環境を立ち上げる例を示します:
# Собираем бинарник
make build
# Запускаем инфраструктуру
make dev
これで、ポート9999でリクエストを処理する準備ができたAPIが動作します。
設定の注意点
環境変数を通じた設定はマイクロサービスでは標準的ですが、ここは本当に多くの変数があります。最小パスワード長から文字種の複雑さ要件まで、すべてを設定できます。
例えば、通常の登録を無効化して招待制ログインのみを許可したい場合は、次のように設定します:
GOTRUE_DISABLE_SIGNUP=true
captchaを有効にする必要がある場合は(hCaptchaとCloudflare Turnstileがサポートされています)、秘密鍵をSECURITY_CAPTCHA_SECRET変数 통해 전달だけです。
프록시를忘れないでください
READMEには開発者からの正直な警告があります:本番環境で認証サーバーを運用することは気軽にできることではありません。チームはTLSプロキシ(Nginx、Kong、またはクラウドロードバランサー)の後ろにSupabase Authを置くことを強く推奨しています。
移行を計画している人への重要な注意として:Supabase Authは元のGoTrueからいくつか機能を削除しています。例えば、instancesテーブルを通じたネイティブマルチテナンシーサポートがなくなりました。アーキテクチャがこれに依存している場合は、アプローチを再考するか、Netlifyの元のGoTrueを使い続ける必要があります。
これは誰向けか
このプロジェクトが不可欠な3つの主なシナリオがあります:
- セルフホストプロジェクト:自分のサーバーでFirebaseの代替を構築している場合。
- Enterpriseソリューション:会社のセキュリティポリシーによりユーザーデータのサードパーティクラウドへの保存が禁止されている場合。
- ローカル開発:Supabase Cloudを使っていても、同一の認証サーバーをオフラインで実行できる能力は貴重な利点です。
Supabase Authは、認可のために車輪の再発明をする必要性を排除する堅実なツールです。是的、READMEのドキュメントは乾燥していてエンドポイントリストで飽和しているように見えるかもしれませんが、コード自体は安定しており、Supabase Cloudでの何百万ものユーザーによって実証されています。JWTとPostgresで動作する信頼性の高いユーザー向けゲートウェイが必要な場合、今日のGoで最も優れたソリューションの1つです。
関連プロジェクト