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 を統合する方法を説明します。
1
新しいプロジェクトを作成
新しい Maven WAR プロジェクトを作成します:プロジェクトのディレクトリに移動します。Javaのソースディレクトリを作成します:
2
Auth0 SDK のインストール
pom.xml の内容を以下に置き換えてください。pom.xml
javaee-api と javax.security.enterprise-api の依存関係が provided になっているのは、Java EE 8 のアプリケーションサーバーが実行時にそれらの実装を提供するためです。3
Auth0アプリケーションを設定する
- Auth0 Dashboard
- Auth0 Dashboardを開き、Applications > Applications > Create Application に移動します。
- アプリケーション名 (例: “My Java EE App”) を入力します。
- アプリケーションタイプとして 従来型Webアプリケーション を選択します。
- 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 を選択します。
ユーザーが希望するアイデンティティプロバイダーでログインできるように、アプリケーションの接続を設定してください。
4
認証を設定する
web.xml を更新して、Auth0の設定をJNDI環境エントリとして保存します。プレースホルダーの値は、Auth0のアプリケーション設定にある Domain、Client ID、Client Secret に置き換えてください。また、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
Implement Java EE Security
Java EE 8 Security API では、
HttpAuthenticationMechanism を使用して認証を処理します。いくつかのセキュリティインターフェースについて、カスタム実装を用意する必要があります。@AutoApplySession アノテーションを使うと、コンテナが認証済みユーザーのセッションを作成できるため、ユーザーは複数のリクエストにまたがってログイン状態を維持できます。6
ログイン機能とログアウト機能を追加
login、コールバック、logout 用のサーブレットを作成します。
LoginServlet は Auth0 の認可 URL を組み立て、ユーザーをリダイレクトします。CallbackServlet は authentication 後のリダイレクトを処理します。Auth0AuthenticationMechanism がまずこの request をインターセプトして認可コードを token に交換するため、このサーブレットで必要なのはリダイレクトのみです。LogoutServlet はセッションをクリアし、Auth0 の logout endpoint にリダイレクトします。7
ユーザーインターフェースを作成する
ホームとプロファイルのビュー用にサーブレットとJSPページを作成します。
HomeServletは認証済みのプリンシパルを確認し、リクエストにプロファイルのclaimsを設定します。ProfileServletはユーザーのプロファイルとJWTのclaimsを表示します。未認証の場合はloginにリダイレクトします。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 トークン内のクレームにアクセスする方法を示しています。name— ユーザーの表示名 (フルネーム)email— ユーザーのメールアドレスpicture— ユーザーのプロフィール画像の URLsub— ユーザーの一意の識別子 (Auth0 ユーザー ID)
Login Parameters をカスタマイズする
Login Parameters をカスタマイズする
LoginServlet で認可 URL を構築する際に、カスタムパラメーターを追加します。src/main/java/com/auth0/example/web/LoginServlet.java
.withAudience() を使用します。Auth0 がサポートする追加の認可パラメーターを指定するには .withParameter() を使用します。API 呼び出し用にトークンを保存する
API 呼び出し用にトークンを保存する
API 呼び出しで生のトークンを利用できるようにするには、その後、保護された API を呼び出す際に access token を取得します。
Auth0AuthenticationMechanism を変更してトークンをセッションに保存します。src/main/java/com/auth0/example/security/Auth0AuthenticationMechanism.java
組織にログインする
組織にログインする
ログイン先を特定の Auth0 Organization に限定するには、SDK は、ID トークン内の
AuthenticationController に organization ID または名前を設定します。src/main/java/com/auth0/example/security/Auth0AuthenticationProvider.java
org_id または org_name クレームを自動的に検証し、設定された organization と一致していることを確認します。追加リソース
Auth0 Java MVC SDK
ソースコードと Issue トラッカー
API リファレンス (JavaDoc)
詳細な API ドキュメント
コミュニティフォーラム
Auth0 Community でサポートを受ける
Java EE サンプルアプリ
GitHub 上の完全なサンプルアプリケーション
よくある問題
callback での state 不一致エラー
callback での state 不一致エラー
ログイン後に
a0.invalid_state エラーが表示される場合、state Cookie が見つからないか、Auth0 から返された state と一致していません。次の点を確認してください。- Auth0 Dashboard の callback URL が、ポート番号とプロトコルを含め、アプリケーションが生成する URL と完全に一致していること。
- ブラウザーがサードパーティ Cookie をブロックしていないこと。
- リバースプロキシやミドルウェアによって、レスポンスから
Set-Cookieヘッダーが削除されていないこと。
buildAuthorizeUrl と handle の両方の 3 引数版を使用していることを確認してください。CDI Bean が検出されない
CDI Bean が検出されない
依存性注入の失敗や Bean が見つからないといったエラーが表示される場合は、次の点を確認してください。
- 使用しているアプリケーションサーバーが 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 セキュリティドメインは、Java EE 8 Security API が依存する JASPIC (Java Authentication SPI for Containers) 連携を WildFly で有効にするために必要です。アプリケーションサーバーの互換性
アプリケーションサーバーの互換性
この Quickstart では
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 の設定値を更新したら、次を実行します: