Goアプリケーションにログインを追加する

Auth0を使用すると、アプリケーションに手軽に認証を追加して、ユーザープロファイル情報にアクセスすることができますこのガイドは、新規または既存のGo WebアプリケーションにAuth0を統合する方法を説明します。

1

Auth0を構成する

Auth0のサービスを利用するには、Auth0 Dashboadに設定済みのアプリケーションがある必要があります。Auth0アプリケーションは、開発中のプロジェクトに対してどのように認証が動作して欲しいかを構成する場所です。

アプリケーションを構成する

対話型のセレクターを使ってAuth0アプリケーションを新規作成するか、統合したいプロジェクトを表す既存のアプリケーションを選択します。Auth0のすべてのアプリケーションには英数字からなる一意のクライアントIDが割り当てられており、アプリケーションのコードがSDKを通じてAuth0 APIを呼び出す際に使用されます。

このクイックスタートを使って構成されたすべての設定は、Dashboardのアプリケーションを自動更新します。今後、アプリケーションの管理もDashboardで行えます。

完了済みの構成を見てみたい場合は、サンプルアプリケーションをご覧ください。

Callback URLを構成する

Callback URLとは、Auth0がユーザーを認証後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはログイン後にアプリケーションに戻りません。

ログアウトURLを構成する

ログアウトURLとは、Auth0がユーザーをログアウト後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはアプリケーションからログアウトできず、エラーを受け取ります。

2

依存関係をインストールする

go.modファイルを作成して、アプリケーションの依存関係をすべてリストします。

GoアプリケーションでAuth0を統合するには、coreos/go-oidc/v3パッケージとx/oauth2パッケージを追加します。

OIDCパッケージとOAuth2パッケージに加え、joho/godotenvgin-gonic/gingin-contrib/sessionsを追加します。

go.modファイルを必要な依存関係で保存し、ターミナルで次のコマンドを使ってインストールします:

go mod download

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です。

4

OAuth2パッケージとOpenID Connectパッケージを構成する

次にOAuth2パッケージとOpenID Connectパッケージを構成します。

platform/authenticatorフォルダーにauth.goという名前のファイルを作成します。このパッケージ内で、OAuth2クライアントとOIDCクライアントを構成してリターンするメソッドを作成し、IDトークンを検証するもう1つのメソッドを作成します。

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ファイルを返します。profilectx.HTML()に渡されているため、同じHTMLファイル内のpicturenicknameといったプロファイル情報にアクセスできます。

このようなHTMLファイルは以下の例のように見えることがありますが、カスタムクレームを含め、いかなるプロファイル情報も取得できます。

9

アプリケーションにログアウトを追加する

ユーザーをログアウトさせるには、セッションのデータを消去し、ユーザーをAuth0ログアウトエンドポイントにリダイレクトします。詳細はログアウトドキュメントをご覧ください。

web/app/logoutフォルダーにlogout.goという名前のファイルを作成し、ユーザーをAuth0ログアウトエンドポイントにリダイレクトするためにHandler関数を追加します。

returnTo URLは、アプリケーションの設定セクションで[Allowed Logout URLs(許可されているログアウトURL)]のリストに載っていなければなりません。詳細は「ログアウト後にユーザーをリダイレクトする」をご覧ください。

web/static/jsフォルダーにuser.jsという名前のファイルを作成し、ログインしたユーザーからクッキーを削除するためのコードを追加します。

10

ルートを保護する

推奨プラクティスでは、認証されたユーザーだけが特定のルートにアクセスできるようにするべきです。認証されていないユーザーが保護されたルートにアクセスしようとした場合、アプリケーションによってリダイレクトされる必要があります。

この場合、HTTPの要求に接続するミドルウェアを実装します。ミドルウェアの関数は、要求がエンドポイントハンドラーにルートされるべきか、ブロックされるべきかを決定します。

platform/middlewareisAuthenticated.goという名前のファイルを作成し、profileセッションキーに基づいてユーザーが認証されているかいないかをチェックする関数を追加します。認証されていないユーザーは、ミドルウェアがアプリケーションのルートへリダイレクトします。

ミドルウェアを作成すると、ルーターに追加することで、認証を必要とするすべてのルートにセットアップできます。

11

アプリケーションを仕上げる

鑑別工具とルーターの構成が完了したら、アプリケーションのエントリーポイントを使って全体を結び付けます。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

Did it work?

Any suggestion or typo?

Edit on GitHub
Sign Up

Sign up for an or to your existing account to integrate directly with your own tenant.