Java Servletアプリケーションにログインを追加する
Auth0を使用すると、アプリケーションに手軽に認証を追加して、ユーザープロファイル情報にアクセスすることができます。このガイドは、新規または既存のJava ServletアプリケーションにAuth0を統合する方法を説明します。
Auth0のサービスを利用するには、Auth0 Dashboadに設定済みのアプリケーションがある必要があります。Auth0アプリケーションは、開発中のプロジェクトに対してどのように認証が動作して欲しいかを構成する場所です。
アプリケーションを構成する
対話型のセレクターを使ってAuth0アプリケーションを新規作成するか、統合したいプロジェクトを表す既存のアプリケーションを選択します。Auth0のすべてのアプリケーションには英数字からなる一意のクライアントIDが割り当てられており、アプリケーションのコードがSDKを通じてAuth0 APIを呼び出す際に使用されます。
このクイックスタートを使って構成されたすべての設定は、Dashboardのアプリケーションを自動更新します。今後、アプリケーションの管理もDashboardで行えます。
完了済みの構成を見てみたい場合は、サンプルアプリケーションをご覧ください。
Callback URLを構成する
Callback URLとは、Auth0がユーザーを認証後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはログイン後にアプリケーションに戻りません。
ログアウトURLを構成する
ログアウトURLとは、Auth0がユーザーをログアウト後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはアプリケーションからログアウトできず、エラーを受け取ります。
依存関係をセットアップする
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
Was this helpful?
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>
Was this helpful?
Javaアプリは、Auth0アカウントに対して認証するために、いくつかの情報を必要とします。サンプルではこの情報をデプロイメント記述子ファイル(src/main/webapp/WEB-INF/web.xml
)から読み取っていますが、任意の場所に保存できます。
この情報はauth0-java-mvc-commonsライブラリーを構成するために使用され、ユーザーがアプリケーションにログインすることを可能にします。ライブラリーや各構成オプションの詳細情報については、ライブラリーのドキュメントをご覧ください。
入力された属性をチェックする
このサンプルを[Download Sample(サンプルをダウンロード)]ボタンでダウンロードした場合は、domain
、clientId
、clientSecret
属性が自動的に入力されます。特にアカウントに複数の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
Was this helpful?
プロジェクトには単一の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.java
:AuthenticationController
の単一インスタンスを作成・管理するためのものです。
ユーザー認証を可能にするために、domain
、clientId
、clientSecret
を使ってauth0-java-mvc-commons
SDKから提供されたAuthenticationController
のインスタンスを作成します。サンプルでは、RS256非対称署名アルゴリズムを使って署名したトークンで使用するためのコンポーネントの構成方法が紹介されています。トークンの署名を検証するために使用された公開鍵を取得するJwkProvider
が指定されています。その他の構成オプションについての詳細は、jwks-rsa-javaレポジトリをご覧ください。HS256を使用している場合は、JwkProvider
を構成する必要はありません。
アプリケーションは、ユーザーがログインできるように、ユニバーサルログインページへリダイレクトします。AuthenticationController
インスタンスを使うと、buildAuthorizeUrl(HttpServletRequest request
、HttpServletResponse response
、String redirectUrl)
メソッドを呼び出すことでリダイレクトURLを生成できます。リダイレクトURLは、Auth0アプリケーションの[Allowed Callback URLs(許可されているコールバックURL)]に追加されたURLである必要があります。
ユーザーがログインした後、結果はGET要求またはPOST HTTP要求経由でCallbackServlet
で受信されます。(初期設定として)Authorization Code Flowを使用しているため、GET要求が送信されます。ライブラリーを暗黙フロー用に構成している場合は、代わりにPOST要求が送信されます。
認可URLをAuthenticationController
で生成することにより、要求はライブラリーで以前設定した呼び出しコンテキストを保持します。コントローラーに渡されると、有効なTokens
インスタンスまたは不具合を特定するExceptionが返ってきます。呼び出しに成功した場合、後でアクセスするために資格情報をどこかに保存しておく必要があります。ライブラリーに含まれるSessionsUtils
クラスを使って、要求のHttpSession
を使用できます。
ユーザーは認証される(トークンが存在する)と、Auth0Filter
によって保護されたリソースへのアクセスを許可されます。HomeServlet
で要求セッションからトークンが取得され、userId
属性として設定されることで、JSPコードから使用できるようになります。
ログアウトを適切に処理するには、セッションを消去し、ユーザーをAuth0からログアウトさせる必要があります。この処理は、サンプルアプリケーションのLogoutServlet
で行われます。
まず、request.getSession().invalidate()
を呼び出してセッションを消去します。それから、returnTo
クエリパラメーターを含めることを念頭に置きつつ、ログアウトURLを構築します。ユーザーはログアウト後にこのURLにリダイレクトされます。最後に応答をログアウトURLにリダイレクトします。
ターミナルからサンプルを実行するには、ディレクトリをプロジェクトのルートフォルダーに変更して以下のラインを実行します:
./gradlew clean app
数秒後、アプリケーションがhttp://localhost:3000/
でアクセスできるようになります。保護されたリソース(http://localhost:3000/portal/home)にアクセスしてみて、Auth0Filter
によるAuth0ログインページへのリダイレクト方法を観察します。ウィジェット が、Dashboardでこのアプリケーションに定義したソーシャル接続とデータベース接続をすべて表示します。

認証成功後、ホームページのコンテンツを見られるようになります。

ホームページ右上の[logout(ログアウト)]ボタン をクリックしてログアウトします。
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-java-mvc-common SDK - Explore the SDK used in this tutorial more fully
- 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.