Goアプリケーションにログインを追加する
Auth0を使用すると、アプリケーションに手軽に認証を追加して、ユーザープロファイル情報にアクセスすることができますこのガイドは、新規または既存のGo WebアプリケーションにAuth0を統合する方法を説明します。
Auth0のサービスを利用するには、Auth0 Dashboadに設定済みのアプリケーションがある必要があります。Auth0アプリケーションは、開発中のプロジェクトに対してどのように認証が動作して欲しいかを構成する場所です。
アプリケーションを構成する
対話型のセレクターを使ってAuth0アプリケーションを新規作成するか、統合したいプロジェクトを表す既存のアプリケーションを選択します。Auth0のすべてのアプリケーションには英数字からなる一意のクライアントIDが割り当てられており、アプリケーションのコードがSDKを通じてAuth0 APIを呼び出す際に使用されます。
このクイックスタートを使って構成されたすべての設定は、Dashboardのアプリケーションを自動更新します。今後、アプリケーションの管理もDashboardで行えます。
完了済みの構成を見てみたい場合は、サンプルアプリケーションをご覧ください。
Callback URLを構成する
Callback URLとは、Auth0がユーザーを認証後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはログイン後にアプリケーションに戻りません。
ログアウトURLを構成する
ログアウトURLとは、Auth0がユーザーをログアウト後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはアプリケーションからログアウトできず、エラーを受け取ります。
go.mod
ファイルを作成して、アプリケーションの依存関係をすべてリストします。
GoアプリケーションでAuth0を統合するには、coreos/go-oidc/v3
パッケージとx/oauth2
パッケージを追加します。
OIDCパッケージとOAuth2パッケージに加え、joho/godotenv
、gin-gonic/gin
、gin-contrib/sessions
を追加します。
go.mod
ファイルを必要な依存関係で保存し、ターミナルで次のコマンドを使ってインストールします:
go mod download
プロジェクトディレクトリのルート内の.env
で以下の環境変数を設定してください:
AUTH0_DOMAIN:Auth0テナントのドメインです。Auth0 Dashboardにあるアプリケーションの[Settings(設定)]の[Domain(ドメイン)]フィールドで確認してください。カスタムドメインを使用する場合は、この値をカスタムドメインの値に設定してください。
AUTH0_CLIENT_ID:このクイックスタートで前にセットアップしたAuth0アプリケーションのIDです。Auth0 Dashboardにあるアプリケーションの[Settings(設定)]の[Client ID(クライアントID)]フィールドで確認してください。
AUTH0_CLIENT_SECRET:このクイックスタートで前にセットアップしたAuth0アプリケーションのシークレットです。Auth0 Dashboardにあるアプリケーションの[Settings(設定)]の[Client Secret(クライアントシークレット)]フィールドで確認してください。
AUTH0_CALLBACK_URL:認証成功後にユーザーをリダイレクトするためにAuth0が使用するURLです。
次にOAuth2パッケージとOpenID Connectパッケージを構成します。
platform/authenticator
フォルダーにauth.go
という名前のファイルを作成します。このパッケージ内で、OAuth2クライアントとOIDCクライアントを構成してリターンするメソッドを作成し、IDトークンを検証するもう1つのメソッドを作成します。
platform/router
フォルダーにrouter.go
という名前のファイルを作成します。このパッケージで、github.com/gin-gonic/ginを使ってルートを構成、リターンするメソッドを作成します。login
ハンドラーとcallback
ハンドラーで使用するために、Authenticator
のインスタンスをメソッドに渡すことになります。
ユーザーが自分で認証するには、/login
ルートを処理するハンドラー関数を作成する必要があります。
web/app/login
フォルダーにlogin.go
という名前のファイルを作成し、Handler
関数を追加します。ハンドラーの実行時にユーザーはAuth0へリダイレクトされ、資格情報を入力できるようになります。
/login
ルートを呼び出すには、web/template
ディレクトリにあるhome.html
テンプレートに/login
へのリンクを追加します。
ユーザーはAuth0ユニバーサルログインページを使って認証すると、 /callback
ルートでアプリに戻ります。
web/app/callback
フォルダーにcallback.go
という名前のファイルを作成し、Handler
関数を追加します。
このハンドラーはAuth0によって提供されたcode
クエリ文字列を受け取り、IDトークンおよびアクセストークンと交換します。
IDトークンが有効である場合、セッションにプロファイル情報とアクセストークンが保存されます。プロファイル情報はIDトークンに含まれるクレームに基づいています。セッションストレージは、必要に応じてアプリケーションがこの情報にアクセスすることを許可します。
ユーザーがログインできるようになったら、認証済みのユーザーに関連付けられたプロファイル情報を取得し、使用できるようにしたいと考えるはずです。
ニックネームやプロフィール写真といったプロファイル情報は、前のセッションで保存されたprofile
からアクセスできます。
web/app/user/user.go
で/user
エンドポイント用のハンドラーを作成し、対応するHTMLファイルを返します。profile
がctx.HTML()
に渡されているため、同じHTMLファイル内のpicture
やnickname
といったプロファイル情報にアクセスできます。
このようなHTMLファイルは以下の例のように見えることがありますが、カスタムクレームを含め、いかなるプロファイル情報も取得できます。
ユーザーをログアウトさせるには、セッションのデータを消去し、ユーザーをAuth0ログアウトエンドポイントにリダイレクトします。詳細はログアウトドキュメントをご覧ください。
web/app/logout
フォルダーにlogout.go
という名前のファイルを作成し、ユーザーをAuth0ログアウトエンドポイントにリダイレクトするためにHandler
関数を追加します。
returnTo
URLは、アプリケーションの設定セクションで[Allowed Logout URLs(許可されているログアウトURL)]のリストに載っていなければなりません。詳細は「ログアウト後にユーザーをリダイレクトする」をご覧ください。
web/static/js
フォルダーにuser.js
という名前のファイルを作成し、ログインしたユーザーからクッキーを削除するためのコードを追加します。
推奨プラクティスでは、認証されたユーザーだけが特定のルートにアクセスできるようにするべきです。認証されていないユーザーが保護されたルートにアクセスしようとした場合、アプリケーションによってリダイレクトされる必要があります。
この場合、HTTPの要求に接続するミドルウェアを実装します。ミドルウェアの関数は、要求がエンドポイントハンドラーにルートされるべきか、ブロックされるべきかを決定します。
platform/middleware
にisAuthenticated.go
という名前のファイルを作成し、profile
セッションキーに基づいてユーザーが認証されているかいないかをチェックする関数を追加します。認証されていないユーザーは、ミドルウェアがアプリケーションのルートへリダイレクトします。
ミドルウェアを作成すると、ルーターに追加することで、認証を必要とするすべてのルートにセットアップできます。
鑑別工具とルーターの構成が完了したら、アプリケーションのエントリーポイントを使って全体を結び付けます。main.go
内で、鑑別工具とルーターのインスタンスを作成すると鑑別工具インスタンスが渡されます。
.env
ファイルを使用している場合は、main()
関数の冒頭でgodotenv.Load()
を呼び出さなくてはなりません。
ターミナルで次のコマンドを使いアプリケーションを仕上げます:
go run main.go
Next Steps
Excellent work! If you made it this far, you should now have login, logout, and user profile information running in your application.
This concludes our quickstart tutorial, but there is so much more to explore. To learn more about what you can do with Auth0, check out:
- Auth0 Dashboard - Learn how to configure and manage your Auth0 tenant and applications
- Auth0 Marketplace - Discover integrations you can enable to extend Auth0’s functionality
Sign up for an or to your existing account to integrate directly with your own tenant.