メインコンテンツへスキップ
前提条件: 始める前に、以下がインストールされていることを確認してください。
  • Go 1.25 以降
  • バージョン管理用の Git
インストールを確認するには、go version を実行します。

はじめに

このクイックスタートでは、Go の Web アプリケーションに Auth0 認証を追加する方法を説明します。go-auth0 SDK と Go 標準の net/http ライブラリを使用して、ログイン、ログアウト、ユーザープロフィール機能を備えたサーバーサイドアプリケーションを構築します。
1

新規プロジェクトを作成

Go アプリケーション用の新しいディレクトリを作成し、モジュールを初期化します。
必要な依存関係をインストールします。
プロジェクト構成を作成します:
go.mod
2

Auth0アプリケーションを設定する

Auth0 のサービスを使用するには、Auth0 Dashboard でアプリケーションを設定する必要があります。Auth0 アプリケーションでは、プロジェクトの認証を構成します。アプリケーションの Settings タブから、次の情報を取得する必要があります。
  • ドメイン
  • クライアントID
  • クライアントシークレット
アプリのDashboard
Auth0 アプリケーションの設定方法は 3 つあります。Quick Setup ツール (推奨) を使用する方法、CLI コマンドを実行する方法、または Dashboard で手動設定する方法です。
Auth0 アプリを作成し、適切な設定値があらかじめ入力された .env ファイルをコピーします。
.env ファイルが存在することを確認します: cat .env (Mac/Linux) または type .env (Windows)
3

Auth0 のクライアントを作成する

auth.go ファイルを作成します。このファイルは go-auth0 の認証クライアントをラップし、認可 URL を生成するためのヘルパーを提供します。
auth.go
この処理で行うこと:
  • テナントのドメイン、クライアントID、クライアントシークレットを使用して、go-auth0 の認証クライアントを初期化します
  • 必要な OAuth2 パラメーターを含む /authorize へのリダイレクトURLを構築する AuthorizationURL ヘルパーを提供します
4

ルートハンドラーを作成

ログイン、コールバック、ユーザープロフィール、ログアウト用のハンドラーを含む handlers.go ファイルを作成します。
handlers.go
重要なポイント:
  • LoginHandler は、CSRF 対策のためにランダムな state パラメーターを生成し、Auth0 の Universal Login にリダイレクトします
  • CallbackHandlergo-auth0 を使用して認可コードをトークンに交換し、その後 UserInfo を呼び出してユーザープロファイルを取得します
  • LogoutHandler はセッションを削除し、Auth0 の /v2/logout エンドポイントにリダイレクトします
  • UserHandler はセッションからユーザープロファイルを取得して、テンプレートをレンダリングします
5

HTMLテンプレートを作成

templates/home.html
6

メインサーバーを作成

main.go ですべてをまとめます:
main.go
7

アプリケーションの実行とテスト

開発サーバーを起動します。
次のように表示されます: Server listening on http://localhost:3000/ブラウザーで http://localhost:3000 を開きます。Sign In をクリックすると、Auth0 の Universal Login ページにリダイレクトされます。認証後、アプリにリダイレクトされ、ユーザープロファイル情報が表示されます。
ポート 3000 がすでに使用されている場合は、.env ファイルの AUTH0_CALLBACK_URL と、Auth0 の Application Settings にある Allowed Callback URLs および Allowed Logout URLs を、新しいポートを使用するように更新してください。
チェックポイントこれで、Auth0 認証を備えた完全に動作する Go Web アプリケーションが localhost 上で実行されているはずです。このアプリでは、次のことができます。
  1. ユーザーを認証のために Auth0 の Universal Login にリダイレクトする
  2. go-auth0 SDK を使用して認可コードをトークンに交換する
  3. ユーザープロフィール情報を取得して表示する
  4. ログアウト時にセッションをクリーンアップする

高度な使用法

認証が必要なルートを保護するために、IsAuthenticated ミドルウェアを作成します。これを handlers.go に追加します。
handlers.go
保護対象のルートにミドルウェアを適用するには、main.go に次を追加します。
main.go
認証後は、セッションに保存されたアクセストークンを使用して保護された API を呼び出せます。
API 用のアクセストークンをリクエストするには、auth.go の認可 URL に audience パラメーターを追加します。
アプリケーションでリフレッシュトークンを使用している場合は、go-auth0 SDK を使用して、リフレッシュトークンを新しいトークンセットと交換できます。
リフレッシュトークンを受け取るには、認可 URL のスコープに offline_access を追加します。

トラブルシューティング

「認可コードをトークンに交換できませんでした」

問題: コールバックハンドラーで認可コードを交換できません。解決策:
  1. .env ファイルの AUTH0_CLIENT_SECRET が正しいことを確認します
  2. AUTH0_CALLBACK_URL が Auth0 の Application Settings の Allowed Callback URLs と完全に一致していることを確認します
  3. 認可コードの有効期限が切れていないことを確認します (認可コードは 1 回限り有効で、有効期間も短く設定されています)

「ユーザー情報を取得できませんでした」

問題: /userinfo エンドポイントがエラーを返します。解決策:
  1. 認可 URL に openid スコープが含まれていることを確認します
  2. アクセストークンが有効で、有効期限切れでないことを確認します
  3. Auth0 ドメインへのネットワーク接続を確認します

「無効な state パラメーター」

問題: コールバックの state パラメーターがセッションと一致しません。解決策:
  1. ブラウザーでクッキーが有効になっていることを確認します
  2. リクエスト間でセッションストアのシークレットが変更されていないことを確認します
  3. ログインフロー中に複数のブラウザータブを使用していないことを確認します

ユーザーがログアウトできない

問題: ログアウトをクリックした後、ユーザーに Auth0 のエラーページが表示されます。解決策:
  1. http://localhost:3000 が Auth0 の Application Settings の Allowed Logout URLs に含まれていることを確認します
  2. client_id パラメーターがアプリケーションのクライアントIDと一致していることを確認します
  3. returnTo URL が許可されているログアウト URL のいずれか 1 つと完全に一致していることを確認します

セッションデータが保持されない

問題: ユーザープロフィールのデータがリクエスト間で消えてしまいます。解決策:
  1. データを保存する前に gob.Register(map[string]interface{}{}) が呼び出されていることを確認します
  2. セッションの値を変更した後に session.Save(r, w) が呼び出されていることを確認します
  3. ブラウザーの設定でクッキーがブロックされていないことを確認します

次のステップ

認証が機能するようになったら、次のトピックも参照してください。

リソース