Skip to main content
前提条件: 始める前に、以下がインストールされていることを確認してください。
  • 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 アプリケーションでは、プロジェクトの認証を設定します。アプリケーションの 設定 タブから、次の情報を取得する必要があります。
  • Domain
  • Client ID
  • Client Secret
アプリのダッシュボード
Auth0 アプリケーションを設定する方法は 3 つあります。Quick Setup ツールを使用する方法 (推奨) 、CLI コマンドを実行する方法、または Auth0 Dashboard で手動設定する方法です。
Auth0 App を作成し、正しい設定値があらかじめ入力された .env ファイルをコピーします。
.env ファイルが存在することを確認します: cat .env (Mac/Linux) または type .env (Windows)
3

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

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

ルートハンドラーを作成

ログイン、コールバック、ユーザープロファイル、ログアウト用のハンドラーを含むhandlers.goファイルを作成します。
handlers.go
重要なポイント:
  • LoginHandler は、CSRF 保護のためにランダムな state parameter を生成し、Auth0 の Universal Login にリダイレクトします
  • CallbackHandler は、go-auth0 を使用して authorization code を token に交換し、その後 UserInfo を呼び出してユーザーのプロファイルを取得します
  • LogoutHandler は、セッションをクリアし、Auth0 の /v2/logout endpoint にリダイレクトします
  • UserHandler は、セッションからプロファイルを取得し、template をレンダリングします
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 のアプリケーション設定の Allowed Callback URLs と完全に一致していることを確認します
  3. 認可コードの有効期限が切れていないことを確認します (コードは 1 回しか使用できず、有効期間も短くなっています)

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

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

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

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

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

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

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

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

次のステップ

認証が機能するようになったら、次の内容も確認してみましょう。

リソース