Auth0を使用すると、アプリケーションに手軽に認証を追加して、ユーザープロファイル情報にアクセスすることができます。このガイドは、新規または既存のJava ServletアプリケーションにAuth0を統合する方法を説明します。Mavenを使用している場合は、
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/logout
に設定してください。2
Auth0をアプリケーションに統合する
依存関係をセットアップする
Auth0でJavaアプリケーションを統合するには、以下の依存関係を追加します:- javax.servlet-api :Java Servletsの作成を許可するライブラリーです。TomcatやGrettyのようなサーバー依存関係を追加する必要があります。どれを追加するかは自己判断です。詳細はサンプルコードをご覧ください。
- auth0-java-mvc-commons :サーバー側のMVC Webアプリ用にJavaでAuth0の使用を許可するJavaライブラリーです。ユーザーを識別するAuth0トークンを最後に取得する過程で受け取った結果を認証、検証するために呼び出す必要のある認可URLを生成します。
build.gradle
に追加します:pom.xml
に追加します:3
Javaアプリケーションを構成する
Javaアプリは、Auth0アカウントに対して認証するために、いくつかの情報を必要とします。サンプルではこの情報をデプロイメント記述子ファイル(プロジェクトには単一のJSPがあります:
src/main/webapp/WEB-INF/web.xml
)から読み取っていますが、任意の場所に保存できます。この情報はauth0-java-mvc-commons ライブラリーを構成するために使用され、ユーザーがアプリケーションにログインすることを可能にします。ライブラリーや各構成オプションの詳細情報については、ライブラリーのドキュメントをご覧ください。入力された属性をチェックする
このサンプルを**[Download Sample(サンプルをダウンロード)]**ボタンでダウンロードした場合は、domain
、clientId
、clientSecret
属性が自動的に入力されます。特にアカウントに複数のAuth0アプリケーションがある場合は、値が正しいことを確認してください。プロジェクト構造
[Download Sample(サンプルをダウンロード)] ボタンでダウンロードできるサンプルプロジェクトは以下の構造になっています:home.jsp
は、ログイン成功後にユーザーに関連付けられたトークンを表示し、ログアウトオプションを提供します。プロジェクトはWebFilterを含みます:Auth0Filter.java
は、保護された/portal/*
パスへのユーザーアクセスを付与する前に、既存のトークンを確認します。トークンが存在しない場合、要求はLoginServlet
へリダイレクトされます。プロジェクトにはサーブレットも4つあります:LoginServlet.java
:ユーザーがログインしようとした時に発動します。client_id
パラメーターとdomain
パラメーターを使って有効な認可URLを作成し、ユーザーをリダイレクトします。CallbackServlet.java
:Callback URLへの要求をキャッチし、データを処理して資格情報を取得するサーブレットです。資格情報はログイン成功後、要求のHttpSessionに保存されます。HomeServlet.java
:以前保存されたトークンを読み取り、home.jsp
リソースで表示するサーブレットです。LogoutServlet.java
:ユーザーがログアウトリンクをクリックすると発動します。ユーザーセッションを無効化し、LoginServlet
でハンドリングされたログインページにユーザーをリダイレクトします。AuthenticationControllerProvider.java
:AuthenticationController
の単一インスタンスを作成・管理するためのものです。
4
AuthenticationControllerを作成する
ユーザー認証を可能にするために、
domain
、clientId
、clientSecret
を使ってauth0-java-mvc-commons
SDKから提供されたAuthenticationController
のインスタンスを作成します。サンプルでは、RS256非対称署名アルゴリズムを使って署名したトークンで使用するためのコンポーネントの構成方法が紹介されています。トークンの署名を検証するために使用された公開鍵を取得するJwkProvider
が指定されています。その他の構成オプションについての詳細は、jwks-rsa-javaレポジトリをご覧ください。HS256を使用している場合は、JwkProvider
を構成する必要はありません。AuthenticationController
はコンテキストを一切保存せず、再使用を意図しています。不必要な作成はリソースの追加作成を招き、パフォーマンスに影響が出る可能性があります。5
ログインにリダイレクトする
アプリケーションは、ユーザーがログインできるように、ユニバーサルログインページへリダイレクトします。
AuthenticationController
インスタンスを使うと、buildAuthorizeUrl(HttpServletRequest request
、HttpServletResponse response
、String redirectUrl)
メソッドを呼び出すことでリダイレクトURLを生成できます。リダイレクトURLは、Auth0アプリケーションの**[Allowed
Callback URLs(許可されているコールバックURL)]**に追加されたURLである必要があります。6
トークンの処理
ユーザーがログインした後、結果はGET要求またはPOST HTTP要求経由で
CallbackServlet
で受信されます。(初期設定として)Authorization Code
Flowを使用しているため、GET要求が送信されます。ライブラリーを暗黙フロー用に構成している場合は、代わりにPOST要求が送信されます。認可URLをAuthenticationController
で生成することにより、要求はライブラリーで以前設定した呼び出しコンテキストを保持します。コントローラーに渡されると、有効なTokens
インスタンスまたは不具合を特定するExceptionが返ってきます。呼び出しに成功した場合、後でアクセスするために資格情報をどこかに保存しておく必要があります。ライブラリーに含まれるSessionsUtils
クラスを使って、要求のHttpSession
を使用できます。トークンを要求した時刻と受け取った
expiresIn
値は保存することを推奨します。そうすることで、次回トークンを使用する時に、すでに有効期限が切れているか、または引き続き有効かを確認できます。このサンプルでは検証をスキップします。7
ホームページを表示する
ユーザーは認証される(トークンが存在する)と、
Auth0Filter
によって保護されたリソースへのアクセスを許可されます。HomeServlet
で要求セッションからトークンが取得され、userId
属性として設定されることで、JSPコードから使用できるようになります。8
ログアウトを処理する
ログアウトを適切に処理するには、セッションを消去し、ユーザーをAuth0からログアウトさせる必要があります。この処理は、サンプルアプリケーションの
LogoutServlet
で行われます。まず、request.getSession().invalidate()
を呼び出してセッションを消去します。それから、returnTo
クエリパラメーターを含めることを念頭に置きつつ、ログアウトURLを構築します。ユーザーはログアウト後にこのURLにリダイレクトされます。最後に応答をログアウトURLにリダイレクトします。9
サンプルを実行する
ターミナルからサンプルを実行するには、ディレクトリをプロジェクトのルートフォルダーに変更して以下のラインを実行します:数秒後、アプリケーションが
認証成功後、ホームページのコンテンツを見られるようになります。
ホームページ右上の**[logout(ログアウト)]** ボタン をクリックしてログアウトします。
http://localhost:3000/
でアクセスできるようになります。保護されたリソース(http://localhost:3000/portal/home)にアクセスしてみて、Auth0Filter
によるAuth0ログインページへのリダイレクト方法を観察します。ウィジェット
が、Dashboardでこのアプリケーションに定義したソーシャル接続とデータベース接続をすべて表示します。

次のステップ
成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。- Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
- auth0-java-mvc-common SDK - このチュートリアルで使用されているSDKをより詳しく説明します
- Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます