Skip to main content

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
javaee-apijavax.security.enterprise-api の依存関係が provided になっているのは、Java EE 8 のアプリケーションサーバーが実行時にそれらの実装を提供するためです。
3

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

  1. Auth0 Dashboardを開き、Applications > Applications > Create Application に移動します。
  2. アプリケーション名 (例: “My Java EE App”) を入力します。
  3. アプリケーションタイプとして 従来型Webアプリケーション を選択します。
  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 を選択します。
ユーザーが希望するアイデンティティプロバイダーでログインできるように、アプリケーションの接続を設定してください。
4

認証を設定する

web.xml を更新して、Auth0の設定をJNDI環境エントリとして保存します。プレースホルダーの値は、Auth0のアプリケーション設定にある DomainClient IDClient 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 トークン内のクレームにアクセスする方法を示しています。
ID トークンでよく使用されるクレーム:
  • name — ユーザーの表示名 (フルネーム)
  • email — ユーザーのメールアドレス
  • picture — ユーザーのプロフィール画像の URL
  • sub — ユーザーの一意の識別子 (Auth0 ユーザー ID)
LoginServlet で認可 URL を構築する際に、カスタムパラメーターを追加します。
src/main/java/com/auth0/example/web/LoginServlet.java
特定の API 向けの access token をリクエストするには .withAudience() を使用します。Auth0 がサポートする追加の認可パラメーターを指定するには .withParameter() を使用します。
API 呼び出しで生のトークンを利用できるようにするには、Auth0AuthenticationMechanism を変更してトークンをセッションに保存します。
src/main/java/com/auth0/example/security/Auth0AuthenticationMechanism.java
その後、保護された API を呼び出す際に access token を取得します。
ログイン先を特定の Auth0 Organization に限定するには、AuthenticationController に organization ID または名前を設定します。
src/main/java/com/auth0/example/security/Auth0AuthenticationProvider.java
SDK は、ID トークン内の org_id または org_name クレームを自動的に検証し、設定された organization と一致していることを確認します。

追加リソース

Auth0 Java MVC SDK

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

API リファレンス (JavaDoc)

詳細な API ドキュメント

コミュニティフォーラム

Auth0 Community でサポートを受ける

Java EE サンプルアプリ

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

よくある問題

ログイン後に a0.invalid_state エラーが表示される場合、state Cookie が見つからないか、Auth0 から返された state と一致していません。次の点を確認してください。
  • Auth0 Dashboard の callback 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
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

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

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

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

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