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

- Quick Setup(推奨)
- CLI
- Dashboard
Auth0 App を作成し、正しい設定値があらかじめ入力された
.env ファイルをコピーします。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/logoutendpoint にリダイレクトします - UserHandler は、セッションからプロファイルを取得し、template をレンダリングします
5
HTMLテンプレートを作成
- home.html
- user.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 で動作しているはずです。アプリでは次のことができます。
- 認証のためにユーザーを 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 のアプリケーション設定の Allowed Callback URLs と完全に一致していることを確認します- 認可コードの有効期限が切れていないことを確認します (コードは 1 回しか使用できず、有効期間も短くなっています)
「ユーザー情報を取得できませんでした」
問題:/userinfo エンドポイントがエラーを返します。解決策:- 認可 URL に
openidスコープが含まれていることを確認します - アクセストークンが有効で、有効期限切れになっていないことを確認します
- Auth0 ドメインへのネットワーク接続を確認します
「無効な state パラメーター」
問題: コールバック内の state パラメーターがセッションと一致しません。解決策:- ブラウザーで Cookie が有効になっていることを確認します
- リクエスト間でセッションストアのシークレットが変更されていないことを確認します
- ログインフロー中に複数のブラウザータブを使用していないことを確認します
ユーザーがログアウトできない
問題: ログアウトをクリックした後、ユーザーに Auth0 のエラーページが表示されます。解決策:http://localhost:3000が Auth0 のアプリケーション設定の Allowed Logout URLs に含まれていることを確認しますclient_idパラメーターがアプリケーションのクライアント IDと一致していることを確認しますreturnToURL が許可されているログアウト URL のいずれか 1 つと完全に一致していることを確認します
セッションデータが保持されない
問題: リクエスト間でユーザープロファイルデータが消えてしまいます。解決策:- データを保存する前に
gob.Register(map[string]interface{}{})が呼び出されていることを確認します - セッションの値を変更した後に
session.Save(r, w)が呼び出されていることを確認します - ブラウザーの設定によって Cookie がブロックされていないことを確認します
次のステップ
- ユーザープロファイル — 認証後に利用できるユーザー情報について学ぶ
- 他のアイデンティティプロバイダーを設定する — ソーシャルまたはエンタープライズのログインオプションを追加する
- 多要素認証を有効にする — セキュリティをさらに強化する
- アクセストークンのベストプラクティス — トークンのセキュリティについて学ぶ
- 本番環境チェックリスト — ローンチ前のセキュリティレビュー
リソース
- go-auth0 GitHub — ソースコードとドキュメント
- Go Web App Sample — 完全に動作するサンプル
- Auth0 Community — コミュニティでサポートを受ける