はじめに
net/http ライブラリを使用して、ログイン、ログアウト、ユーザープロフィール機能を備えたサーバーサイドアプリケーションを構築します。
新規プロジェクトを作成
Go アプリケーション用の新しいディレクトリを作成し、モジュールを初期化します。必要な依存関係をインストールします。プロジェクト構成を作成します:
想定されるgo.modを表示
想定されるgo.modを表示
go.mod
Auth0アプリケーションを設定する
Auth0 のサービスを使用するには、Auth0 Dashboard でアプリケーションを設定する必要があります。Auth0 アプリケーションでは、プロジェクトの認証を構成します。アプリケーションの Settings タブから、次の情報を取得する必要があります。
Auth0 アプリケーションの設定方法は 3 つあります。Quick Setup ツール (推奨) を使用する方法、CLI コマンドを実行する方法、または Dashboard で手動設定する方法です。
- ドメイン
- クライアントID
- クライアントシークレット

- クイックセットアップ(推奨)
- CLI
- Dashboard
Auth0 アプリを作成し、適切な設定値があらかじめ入力された
.env ファイルをコピーします。Auth0 のクライアントを作成する
auth.go ファイルを作成します。このファイルは go-auth0 の認証クライアントをラップし、認可 URL を生成するためのヘルパーを提供します。auth.go
- テナントのドメイン、クライアントID、クライアントシークレットを使用して、
go-auth0の認証クライアントを初期化します - 必要な OAuth2 パラメーターを含む
/authorizeへのリダイレクトURLを構築するAuthorizationURLヘルパーを提供します
ルートハンドラーを作成
ログイン、コールバック、ユーザープロフィール、ログアウト用のハンドラーを含む 重要なポイント:
handlers.go ファイルを作成します。handlers.go
- LoginHandler は、CSRF 対策のためにランダムな state パラメーターを生成し、Auth0 の Universal Login にリダイレクトします
- CallbackHandler は
go-auth0を使用して認可コードをトークンに交換し、その後UserInfoを呼び出してユーザープロファイルを取得します - LogoutHandler はセッションを削除し、Auth0 の
/v2/logoutエンドポイントにリダイレクトします - UserHandler はセッションからユーザープロファイルを取得して、テンプレートをレンダリングします
アプリケーションの実行とテスト
開発サーバーを起動します。次のように表示されます:
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 上で実行されているはずです。このアプリでは、次のことができます。
- ユーザーを認証のために Auth0 の Universal Login にリダイレクトする
go-auth0SDK を使用して認可コードをトークンに交換する- ユーザープロフィール情報を取得して表示する
- ログアウト時にセッションをクリーンアップする
高度な使用法
ミドルウェアでルートを保護する
ミドルウェアでルートを保護する
認証が必要なルートを保護するために、保護対象のルートにミドルウェアを適用するには、
IsAuthenticated ミドルウェアを作成します。これを handlers.go に追加します。handlers.go
main.go に次を追加します。main.go
保護された API を呼び出す
保護された API を呼び出す
認証後は、セッションに保存されたアクセストークンを使用して保護された API を呼び出せます。
API 用のアクセストークンをリクエストするには、
auth.go の認可 URL に audience パラメーターを追加します。トークンを更新する
トークンを更新する
アプリケーションでリフレッシュトークンを使用している場合は、リフレッシュトークンを受け取るには、認可 URL のスコープに
go-auth0 SDK を使用して、リフレッシュトークンを新しいトークンセットと交換できます。offline_access を追加します。トラブルシューティング
よくある問題と解決策
よくある問題と解決策
「認可コードをトークンに交換できませんでした」
問題: コールバックハンドラーで認可コードを交換できません。解決策:.envファイルのAUTH0_CLIENT_SECRETが正しいことを確認しますAUTH0_CALLBACK_URLが Auth0 の Application Settings の Allowed Callback URLs と完全に一致していることを確認します- 認可コードの有効期限が切れていないことを確認します (認可コードは 1 回限り有効で、有効期間も短く設定されています)
「ユーザー情報を取得できませんでした」
問題:/userinfo エンドポイントがエラーを返します。解決策:- 認可 URL に
openidスコープが含まれていることを確認します - アクセストークンが有効で、有効期限切れでないことを確認します
- Auth0 ドメインへのネットワーク接続を確認します
「無効な state パラメーター」
問題: コールバックの state パラメーターがセッションと一致しません。解決策:- ブラウザーでクッキーが有効になっていることを確認します
- リクエスト間でセッションストアのシークレットが変更されていないことを確認します
- ログインフロー中に複数のブラウザータブを使用していないことを確認します
ユーザーがログアウトできない
問題: ログアウトをクリックした後、ユーザーに Auth0 のエラーページが表示されます。解決策:http://localhost:3000が Auth0 の Application Settings の Allowed Logout URLs に含まれていることを確認しますclient_idパラメーターがアプリケーションのクライアントIDと一致していることを確認しますreturnToURL が許可されているログアウト URL のいずれか 1 つと完全に一致していることを確認します
セッションデータが保持されない
問題: ユーザープロフィールのデータがリクエスト間で消えてしまいます。解決策:- データを保存する前に
gob.Register(map[string]interface{}{})が呼び出されていることを確認します - セッションの値を変更した後に
session.Save(r, w)が呼び出されていることを確認します - ブラウザーの設定でクッキーがブロックされていないことを確認します
次のステップ
- ユーザープロフィール — 認証後に利用できるユーザー情報について確認します
- 他のIDプロバイダーを設定する — ソーシャルログインやエンタープライズログインのオプションを追加します
- 多要素認証を有効にする — セキュリティをさらに強化します
- アクセストークンのベストプラクティス — トークンのセキュリティについて確認します
- 本番環境チェックリスト — リリース前のセキュリティレビュー
リソース
- go-auth0 GitHub — ソースコードとドキュメント
- Go Web App Sample — 完全に動作するサンプル例
- Auth0 Community — コミュニティでサポートを得る