メインコンテンツへスキップ
Auth0を使用すると、アプリケーションに手軽に認証を追加して、ユーザープロファイル情報にアクセスすることができます。このガイドは、新規または既存のJava Servletアプリケーションに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/logoutに設定してください。
2

Auth0をアプリケーションに統合する

依存関係をセットアップする

Auth0でJavaアプリケーションを統合するには、以下の依存関係を追加します:
  • javax.servlet-api :Java Servletsの作成を許可するライブラリーです。TomcatやGrettyのようなサーバー依存関係を追加する必要があります。どれを追加するかは自己判断です。詳細はサンプルコードをご覧ください。
  • auth0-java-mvc-commons :サーバー側のMVC Webアプリ用にJavaでAuth0の使用を許可するJavaライブラリーです。ユーザーを識別するAuth0トークンを最後に取得する過程で受け取った結果を認証、検証するために呼び出す必要のある認可URLを生成します。
Gradleを使用している場合は、build.gradleに追加します:
// build.gradle
compile 'javax.servlet:javax.servlet-api:3.1.0'
compile 'com.auth0:mvc-auth-commons:1.+'W
Mavenを使用している場合は、pom.xmlに追加します:
<!-- pom.xml -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>mvc-auth-commons</artifactId>
<version>[1.0, 2.0)</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
3

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

Javaアプリは、Auth0アカウントに対して認証するために、いくつかの情報を必要とします。サンプルではこの情報をデプロイメント記述子ファイル(src/main/webapp/WEB-INF/web.xml)から読み取っていますが、任意の場所に保存できます。この情報はauth0-java-mvc-commons ライブラリーを構成するために使用され、ユーザーがアプリケーションにログインすることを可能にします。ライブラリーや各構成オプションの詳細情報については、ライブラリーのドキュメントをご覧ください。

入力された属性をチェックする

このサンプルを**[Download Sample(サンプルをダウンロード)]**ボタンでダウンロードした場合は、domainclientIdclientSecret属性が自動的に入力されます。特にアカウントに複数のAuth0アプリケーションがある場合は、値が正しいことを確認してください。

プロジェクト構造

[Download Sample(サンプルをダウンロード)] ボタンでダウンロードできるサンプルプロジェクトは以下の構造になっています:
- src
-- main
---- java
------ com
-------- auth0
---------- example
------------ Auth0Filter.java
------------ AuthenticationControllerProvider.java
------------ HomeServlet.java
------------ CallbackServlet.java
------------ LoginServlet.java
------------ LogoutServlet.java
---- webapp
------ WEB-INF
-------- jsp
---------- home.jsp
-------- web.xml

build.gradle
プロジェクトには単一のJSPがあります: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.javaAuthenticationControllerの単一インスタンスを作成・管理するためのものです。
4

AuthenticationControllerを作成する

ユーザー認証を可能にするために、domainclientIdclientSecretを使ってauth0-java-mvc-commons SDKから提供されたAuthenticationControllerのインスタンスを作成します。サンプルでは、RS256非対称署名アルゴリズムを使って署名したトークンで使用するためのコンポーネントの構成方法が紹介されています。トークンの署名を検証するために使用された公開鍵を取得するJwkProviderが指定されています。その他の構成オプションについての詳細は、jwks-rsa-javaレポジトリをご覧ください。HS256を使用している場合は、JwkProviderを構成する必要はありません。
AuthenticationControllerはコンテキストを一切保存せず、再使用を意図しています。不必要な作成はリソースの追加作成を招き、パフォーマンスに影響が出る可能性があります。
5

ログインにリダイレクトする

アプリケーションは、ユーザーがログインできるように、ユニバーサルログインページへリダイレクトします。AuthenticationControllerインスタンスを使うと、buildAuthorizeUrl(HttpServletRequest requestHttpServletResponse responseString 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

サンプルを実行する

ターミナルからサンプルを実行するには、ディレクトリをプロジェクトのルートフォルダーに変更して以下のラインを実行します:
./gradlew clean app
数秒後、アプリケーションがhttp://localhost:3000/でアクセスできるようになります。保護されたリソース(http://localhost:3000/portal/home)にアクセスしてみて、Auth0FilterによるAuth0ログインページへのリダイレクト方法を観察します。ウィジェット が、Dashboardでこのアプリケーションに定義したソーシャル接続とデータベース接続をすべて表示します。
認証成功後、ホームページのコンテンツを見られるようになります。
ホームページ右上の**[logout(ログアウト)]** ボタン をクリックしてログアウトします。

次のステップ

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