AI を使用して Auth0 を統合する
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 の完全なドキュメント →
前提条件:
- Java Development Kit (JDK) 11 以降
- Apache Maven 3.x
- Java EE 8 対応アプリケーションサーバー (例: WildFly 14 以降、Payara 5 以降、または GlassFish 5 以降)
- Auth0 アカウント — 無料でサインアップ
はじめに
auth0-java-mvc-common SDK と Java EE 8 Security API を使用して、新規または既存の Java EE アプリケーションに Auth0 を統合する方法を説明します。
Auth0 SDK をインストールする
pom.xml の内容を以下のように置き換えます。pom.xml
javaee-api と javax.security.enterprise-api の依存関係が provided になっているのは、Java EE 8 アプリケーションサーバーが実行時にそれらの実装を提供するためです。Auth0アプリケーションを設定する
- ダッシュボード
- Auth0 Dashboard に移動し、Applications > Applications > Create Application の順に選択します。
- アプリケーションの名前 (例: “My Java EE App”) を入力します。
- アプリケーションの種類として Regular Web Applications を選択します。
- Create を選択します。
- Settings タブを開きます。
- Domain、Client ID、Client Secret の値を控えます。
- Application URIs までスクロールし、以下を設定します。
- Allowed Callback URLs:
http://localhost:8080/callback - Allowed Logout URLs:
http://localhost:8080/
- Allowed Callback URLs:
- Save Changes を選択します。
ユーザーが使用したいIDプロバイダーでログインできるように、アプリケーションの接続を設定してください。
認証を設定する
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。Java EE のセキュリティを実装する
Java EE 8 Security API では、認証の処理に
HttpAuthenticationMechanism を使用します。そのため、複数のセキュリティインターフェースのカスタム実装を用意する必要があります。@AutoApplySession アノテーションを使用すると、コンテナが認証済みユーザーのセッションを作成し、複数のリクエストにまたがってログイン状態を維持できます。ログイン機能とログアウト機能を追加
ログイン、コールバック、ログアウト用のサーブレットを作成します。
LoginServlet は Auth0 の認可 URL を生成し、ユーザーをリダイレクトします。CallbackServlet は認証後のリダイレクトを処理します。Auth0AuthenticationMechanism が最初にこのリクエストをインターセプトし、認可 code をトークンに交換するため、このサーブレットで必要なのはリダイレクトだけです。LogoutServlet はセッションをクリアして、Auth0 のログアウトエンドポイントにリダイレクトします。ユーザーインターフェースを作成する
ホームビューとプロフィールビュー用のサーブレットとJSPページを作成します。
HomeServletは認証済みプリンシパルを確認し、リクエストにプロフィールクレームを設定します。ProfileServletはユーザーのプロフィールとJWTクレームを表示します。未認証の場合はログインページにリダイレクトします。アプリケーションを実行する
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トークン のクレームにアクセスする方法を示しています。name— ユーザーの表示名 (フルネーム)email— ユーザーのメールアドレスpicture— ユーザーのプロフィール画像の URLsub— ユーザーの一意な識別子 (Auth0 ユーザー ID)
ログインパラメーターをカスタマイズする
ログインパラメーターをカスタマイズする
API 呼び出し用にトークンを保存する
API 呼び出し用にトークンを保存する
API 呼び出しで生のトークンにアクセスするには、トークンをセッションに保存するよう 次に、保護された API を呼び出す際にアクセストークンを取得します。
Auth0AuthenticationMechanism を変更します。src/main/java/com/auth0/example/security/Auth0AuthenticationMechanism.java
組織にログインする
組織にログインする
特定の Auth0 Organization にログインを制限するには、組織 ID または名前を指定して SDK は、設定した組織と一致することを確認するため、IDトークン 内の
AuthenticationController を設定します。src/main/java/com/auth0/example/security/Auth0AuthenticationProvider.java
org_id または org_name クレームを自動的に検証します。追加リソース
Auth0 Java MVC SDK
ソースコードと Issue トラッカー
API リファレンス(JavaDoc)
詳細な API ドキュメント
コミュニティフォーラム
Auth0 コミュニティでサポートを受ける
Java EE サンプルアプリ
GitHub 上の完全なサンプルアプリケーション
よくある問題
コールバックでの state 不一致エラー
コールバックでの state 不一致エラー
ログイン後に
a0.invalid_state エラーが発生する場合、state Cookie が見つからないか、Auth0 から返された state と一致していません。次の点を確認してください。- Auth0 Dashboard のコールバック URL が、ポート番号とプロトコルを含めて、アプリケーションが構築する URL と完全に一致していること。
- ブラウザーがサードパーティ Cookie をブロックしていないこと。
- リバースプロキシまたはミドルウェアによって、レスポンスから
Set-Cookieヘッダーが削除されていないこと。
buildAuthorizeUrl と handle の両方の 3 引数版を使用していることを確認してください。CDI Bean が検出されない
CDI Bean が検出されない
インジェクションの失敗や Bean が見つからないというエラーが表示される場合は、次の点を確認してください。Java EE 8 Security API が依存する JASPIC (Java Authentication SPI for Containers) 統合を WildFly で有効にするには、
- アプリケーションサーバーが CDI 2.0 (Java EE 8 の一部) をサポートしていること
- すべてのセキュリティクラス (
Auth0AuthenticationConfig、Auth0AuthenticationProvider、Auth0JwtIdentityStore、Auth0AuthenticationMechanism) に@ApplicationScopedアノテーションが付与されていること src/main/webapp/WEB-INF/jboss-web.xmlが存在し、jaspitestセキュリティドメインが設定されていること
src/main/webapp/WEB-INF/jboss-web.xml
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
サンプルアプリケーション
Java EE サンプルアプリケーション
ログイン、ログアウト、ユーザープロファイルなどの例が含まれています。
src/main/webapp/WEB-INF/web.xml の Auth0 の設定値を更新してから、次を実行します。