Auth0を使用すると、アプリケーションに手軽に認証を追加して、ユーザープロファイル情報にアクセスすることができますこのガイドは、新規または既存のGo WebアプリケーションにAuth0を統合する方法を説明します。
1
Auth0を構成する
Auth0のサービスを利用するには、Auth0 Dashboadに設定済みのアプリケーションがある必要があります。Auth0アプリケーションは、開発中のプロジェクトに対してどのように認証が動作して欲しいかを構成する場所です。
アプリケーションを構成する
対話型のセレクターを使ってAuth0アプリケーションを新規作成するか、統合したいプロジェクトを表す既存のアプリケーションを選択します。Auth0のすべてのアプリケーションには英数字からなる一意のクライアントIDが割り当てられており、アプリケーションのコードがSDKを通じてAuth0 APIを呼び出す際に使用されます。このクイックスタートを使って構成されたすべての設定は、Dashboardのアプリケーションを自動更新します。今後、アプリケーションの管理もDashboardで行えます。完了済みの構成を見てみたい場合は、サンプルアプリケーションをご覧ください。Callback URLを構成する
Callback URLとは、Auth0がユーザーを認証後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはログイン後にアプリケーションに戻りません。サンプルプロジェクトに沿って進めている場合は、
http://localhost:3000``/callbackに設定してください。ログアウトURLを構成する
ログアウトURLとは、Auth0がユーザーをログアウト後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはアプリケーションからログアウトできず、エラーを受け取ります。サンプルプロジェクトに沿って進めている場合は、
http://localhost:3000に設定してください。2
依存関係をインストールする
go.modファイルを作成して、アプリケーションの依存関係をすべてリストします。GoアプリケーションでAuth0を統合するには、coreos/go-oidc/v3パッケージとx/oauth2パッケージを追加します。OIDCパッケージとOAuth2パッケージに加え、joho/godotenv、gin-gonic/gin、gin-contrib/sessionsを追加します。この例ではルーティングに
ginを使用しますが、お好きなルーターを使用できます。go.modファイルを必要な依存関係で保存し、ターミナルで次のコマンドを使ってインストールします:3
環境変数を構成する
プロジェクトディレクトリのルート内の
.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です。
5
アプリケーションルートをセットアップする
platform/routerフォルダーにrouter.goという名前のファイルを作成します。このパッケージで、github.com/gin-gonic/ginを使ってルートを構成、リターンするメソッドを作成します。loginハンドラーとcallbackハンドラーで使用するために、Authenticatorのインスタンスをメソッドに渡すことになります。6
アプリケーションにログインを追加する
ユーザーが自分で認証するには、
/loginルートを処理するハンドラー関数を作成する必要があります。web/app/loginフォルダーにlogin.goという名前のファイルを作成し、Handler関数を追加します。ハンドラーの実行時にユーザーはAuth0へリダイレクトされ、資格情報を入力できるようになります。/loginルートを呼び出すには、web/templateディレクトリにあるhome.htmlテンプレートに/loginへのリンクを追加します。7
認証コールバックを処理する
ユーザーはAuth0ユニバーサルログインページを使って認証すると、
/callbackルートでアプリに戻ります。web/app/callbackフォルダーにcallback.goという名前のファイルを作成し、Handler関数を追加します。このハンドラーはAuth0によって提供されたcodeクエリ文字列を受け取り、IDトークンおよびアクセストークンと交換します。IDトークンが有効である場合、セッションにプロファイル情報とアクセストークンが保存されます。プロファイル情報はIDトークンに含まれるクレームに基づいています。セッションストレージは、必要に応じてアプリケーションがこの情報にアクセスすることを許可します。8
ユーザープロファイル情報を表示する
ユーザーがログインできるようになったら、認証済みのユーザーに関連付けられたプロファイル情報を取得し、使用できるようにしたいと考えるはずです。ニックネームやプロフィール写真といったプロファイル情報は、前のセッションで保存された
profileからアクセスできます。web/app/user/user.goで/userエンドポイント用のハンドラーを作成し、対応するHTMLファイルを返します。profileがctx.HTML()に渡されているため、同じHTMLファイル内のpictureやnicknameといったプロファイル情報にアクセスできます。このようなHTMLファイルは以下の例のように見えることがありますが、カスタムクレームを含め、いかなるプロファイル情報も取得できます。9
アプリケーションにログアウトを追加する
ユーザーをログアウトさせるには、セッションのデータを消去し、ユーザーをAuth0ログアウトエンドポイントにリダイレクトします。詳細はログアウトドキュメントをご覧ください。
web/app/logoutフォルダーにlogout.goという名前のファイルを作成し、ユーザーをAuth0ログアウトエンドポイントにリダイレクトするためにHandler関数を追加します。returnTo URLは、アプリケーションの設定セクションで[Allowed Logout URLs(許可されているログアウトURL)]のリストに載っていなければなりません。詳細は「ログアウト後にユーザーをリダイレクトする」をご覧ください。web/static/jsフォルダーにuser.jsという名前のファイルを作成し、ログインしたユーザーからクッキーを削除するためのコードを追加します。10
ルートを保護する
推奨プラクティスでは、認証されたユーザーだけが特定のルートにアクセスできるようにするべきです。認証されていないユーザーが保護されたルートにアクセスしようとした場合、アプリケーションによってリダイレクトされる必要があります。この場合、HTTPの要求に接続するミドルウェアを実装します。ミドルウェアの関数は、要求がエンドポイントハンドラーにルートされるべきか、ブロックされるべきかを決定します。
platform/middlewareにisAuthenticated.goという名前のファイルを作成し、profileセッションキーに基づいてユーザーが認証されているかいないかをチェックする関数を追加します。認証されていないユーザーは、ミドルウェアがアプリケーションのルートへリダイレクトします。ミドルウェアを作成すると、ルーターに追加することで、認証を必要とするすべてのルートにセットアップできます。11
アプリケーションを仕上げる
鑑別工具とルーターの構成が完了したら、アプリケーションのエントリーポイントを使って全体を結び付けます。
main.go内で、鑑別工具とルーターのインスタンスを作成すると鑑別工具インスタンスが渡されます。.envファイルを使用している場合は、main()関数の冒頭でgodotenv.Load()を呼び出さなくてはなりません。ターミナルで次のコマンドを使いアプリケーションを仕上げます:次のステップ
成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。- Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
- Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます