メインコンテンツへスキップ

AI を使用して Auth0 を統合する

Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントを使用している場合は、agent skills を使うことで、数分で Auth0 認証を自動的に追加できます。インストール:
次に、AI アシスタントに次のように依頼します。
AI アシスタントは、Auth0 アプリケーションの作成、認証情報の取得、Auth0 Java MVC Commons SDK 依存関係の追加、Java EE 8 Security API を使用した認証の構成、ログイン/ログアウトフローの実装を自動的に行います。agent skills の完全なドキュメント →
前提条件:

はじめに

Auth0 を使用すると、アプリケーションに認証をすばやく追加し、ユーザープロフィール情報にアクセスできます。このガイドでは、auth0-java-mvc-common SDK と Java EE 8 Security API を使用して、新規または既存の Java EE アプリケーションに Auth0 を統合する方法を説明します。
1

新しいプロジェクトを作成

新しい Maven WAR プロジェクトを作成します:
プロジェクトディレクトリに移動します。
Java のソースディレクトリを作成します。
2

Auth0 SDK をインストールする

pom.xml の内容を以下のように置き換えます。
pom.xml
The javaee-apijavax.security.enterprise-api の依存関係が provided になっているのは、Java EE 8 アプリケーションサーバーが実行時にそれらの実装を提供するためです。
3

Auth0アプリケーションを設定する

  1. Auth0 Dashboard に移動し、Applications > Applications > Create Application の順に選択します。
  2. アプリケーションの名前 (例: “My Java EE App”) を入力します。
  3. アプリケーションの種類として Regular Web Applications を選択します。
  4. Create を選択します。
  5. Settings タブを開きます。
  6. DomainClient IDClient Secret の値を控えます。
  7. Application URIs までスクロールし、以下を設定します。
    • Allowed Callback URLs: http://localhost:8080/callback
    • Allowed Logout URLs: http://localhost:8080/
  8. Save Changes を選択します。
ユーザーが使用したいIDプロバイダーでログインできるように、アプリケーションの接続を設定してください。
4

認証を設定する

web.xml を更新して、Auth0 の設定を JNDI 環境エントリとして保存します。プレースホルダーの値は、Auth0 アプリケーション設定のドメインクライアントIDクライアントシークレットに置き換えてください。続いて、Java EE 8 Security API が必要とする JASPIC セキュリティドメインを設定する jboss-web.xml、JNDI から設定を読み込む CDI Bean の Auth0AuthenticationConfig.java、および AuthenticationController を構築する CDI プロデューサーの Auth0AuthenticationProvider.java を作成します。
auth0.domain の値には https:// を含めないでください。ドメインとリージョンのみを指定してください。例: dev-abc123.us.auth0.com
5

Java EE のセキュリティを実装する

Java EE 8 Security API では、認証の処理に HttpAuthenticationMechanism を使用します。そのため、複数のセキュリティインターフェースのカスタム実装を用意する必要があります。@AutoApplySession アノテーションを使用すると、コンテナが認証済みユーザーのセッションを作成し、複数のリクエストにまたがってログイン状態を維持できます。
6

ログイン機能とログアウト機能を追加

ログイン、コールバック、ログアウト用のサーブレットを作成します。LoginServlet は Auth0 の認可 URL を生成し、ユーザーをリダイレクトします。CallbackServlet は認証後のリダイレクトを処理します。Auth0AuthenticationMechanism が最初にこのリクエストをインターセプトし、認可 code をトークンに交換するため、このサーブレットで必要なのはリダイレクトだけです。LogoutServlet はセッションをクリアして、Auth0 のログアウトエンドポイントにリダイレクトします。
7

ユーザーインターフェースを作成する

ホームビューとプロフィールビュー用のサーブレットとJSPページを作成します。HomeServletは認証済みプリンシパルを確認し、リクエストにプロフィールクレームを設定します。ProfileServletはユーザーのプロフィールとJWTクレームを表示します。未認証の場合はログインページにリダイレクトします。
8

アプリケーションを実行する

WildFly Maven プラグインを使用して、アプリケーションをビルドして実行します。
アプリケーションが起動し、リッスンしているURLが表示されるはずです:
ブラウザーで http://localhost:8080 を開きます。ナビゲーションバーの Login リンクをクリックします。Auth0 のログインページにリダイレクトされます。認証後、プロフィールページ にリダイレクトされ、ユーザー情報と JWT クレームが表示されます。
このサンプルは JSP を使用しており、WildFly アプリケーションサーバーでテストされています。別の Java EE 8 互換コンテナを使用している場合は、一部の手順を調整する必要がある場合があります。
チェックポイントこれで、http://localhost:8080 で Auth0 によって保護された、完全に機能する Java EE アプリケーションが実行されているはずです。ユーザーはログイン、プロフィールの表示、ログアウトを行えます。

高度な使用例

Auth0JwtPrincipal は、任意のサーブレットで request.getUserPrincipal() を介して利用できます。ProfileServlet では、デコードされた IDトークン のクレームにアクセスする方法を示しています。
IDトークン で一般的に使用できるクレーム:
  • name — ユーザーの表示名 (フルネーム)
  • email — ユーザーのメールアドレス
  • picture — ユーザーのプロフィール画像の URL
  • sub — ユーザーの一意な識別子 (Auth0 ユーザー ID)
LoginServlet で認可 URL を構築する際に、カスタムパラメーターを追加します。
src/main/java/com/auth0/example/web/LoginServlet.java
特定の API 向けのアクセストークンをリクエストするには .withAudience() を使用します。Auth0 がサポートする追加の認可パラメーターを指定するには .withParameter() を使用します。
API 呼び出しで生のトークンにアクセスするには、トークンをセッションに保存するよう Auth0AuthenticationMechanism を変更します。
src/main/java/com/auth0/example/security/Auth0AuthenticationMechanism.java
次に、保護された API を呼び出す際にアクセストークンを取得します。
特定の Auth0 Organization にログインを制限するには、組織 ID または名前を指定して AuthenticationController を設定します。
src/main/java/com/auth0/example/security/Auth0AuthenticationProvider.java
SDK は、設定した組織と一致することを確認するため、IDトークン 内の org_id または org_name クレームを自動的に検証します。

追加リソース

Auth0 Java MVC SDK

ソースコードと Issue トラッカー

API リファレンス(JavaDoc)

詳細な API ドキュメント

コミュニティフォーラム

Auth0 コミュニティでサポートを受ける

Java EE サンプルアプリ

GitHub 上の完全なサンプルアプリケーション

よくある問題

ログイン後に a0.invalid_state エラーが発生する場合、state Cookie が見つからないか、Auth0 から返された state と一致していません。次の点を確認してください。
  • Auth0 Dashboard のコールバック URL が、ポート番号とプロトコルを含めて、アプリケーションが構築する URL と完全に一致していること。
  • ブラウザーがサードパーティ Cookie をブロックしていないこと。
  • リバースプロキシまたはミドルウェアによって、レスポンスから Set-Cookie ヘッダーが削除されていないこと。
Cookie ベースの state 保存を使用する、buildAuthorizeUrlhandle の両方の 3 引数版を使用していることを確認してください。
インジェクションの失敗や Bean が見つからないというエラーが表示される場合は、次の点を確認してください。
  • アプリケーションサーバーが CDI 2.0 (Java EE 8 の一部) をサポートしていること
  • すべてのセキュリティクラス (Auth0AuthenticationConfigAuth0AuthenticationProviderAuth0JwtIdentityStoreAuth0AuthenticationMechanism) に @ApplicationScoped アノテーションが付与されていること
  • src/main/webapp/WEB-INF/jboss-web.xml が存在し、jaspitest セキュリティドメインが設定されていること
src/main/webapp/WEB-INF/jboss-web.xml
Java EE 8 Security API が依存する JASPIC (Java Authentication SPI for Containers) 統合を WildFly で有効にするには、jaspitest セキュリティドメインが必要です。
このクイックスタートでは javax 名前空間 (Java EE 8) を使用します。WildFly 27+ や Payara 6+ など、jakarta 名前空間 (Jakarta EE 9+) に移行したサーバーを使用している場合、コードはコンパイルも実行もできません。Java EE 8 互換のサーバーを使用してください。
  • WildFly 14 ~ 26
  • Payara 5
  • GlassFish 5
  • Java EE 8 機能を有効化した Open Liberty

サンプルアプリケーション

Auth0 と統合された Java EE のサンプルアプリケーションが GitHub で公開されています。

Java EE サンプルアプリケーション

ログイン、ログアウト、ユーザープロファイルなどの例が含まれています。
クローンして実行します。
src/main/webapp/WEB-INF/web.xml の Auth0 の設定値を更新してから、次を実行します。
ブラウザーで http://localhost:8080 を開き、Login をクリックしてテストしてください。