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

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

Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントを使用している場合は、agent skills を使うことで、数分で Auth0 認証を自動的に追加できます。インストール:
npx skills add auth0/agent-skills --skill auth0-quickstart --skill auth0-java-mvc-common
次に、AI アシスタントに次のように依頼します。
Add Auth0 authentication to my Java EE app
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 プロジェクトを作成します:
mvn archetype:generate \
  -DgroupId=com.auth0.example \
  -DartifactId=java-ee-auth0-app \
  -DarchetypeArtifactId=maven-archetype-webapp \
  -DinteractiveMode=false
プロジェクトディレクトリに移動します。
cd java-ee-auth0-app
Java のソースディレクトリを作成します。
mkdir -p src/main/java/com/auth0/example/security
mkdir -p src/main/java/com/auth0/example/web
mkdir -p src/main/webapp/WEB-INF/jsp
2

Auth0 SDK をインストールする

pom.xml の内容を以下のように置き換えます。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.auth0.example</groupId>
    <artifactId>java-ee-auth0-app</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <version.wildfly>23.0.2.Final</version.wildfly>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>mvc-auth-commons</artifactId>
            <version>[1.0, 2.0)</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>8.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.security.enterprise</groupId>
            <artifactId>javax.security.enterprise-api</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.16.0</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>java-ee-auth0-app</finalName>
        <plugins>
            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-maven-plugin</artifactId>
                <version>4.2.0.Final</version>
                <configuration>
                    <version>${version.wildfly}</version>
                    <javaOpts>
                        <javaOpt>-Djboss.http.port=8080</javaOpt>
                    </javaOpts>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
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 プラグインを使用して、アプリケーションをビルドして実行します。
mvn clean wildfly:run
アプリケーションが起動し、リッスンしているURLが表示されるはずです:
INFO  [org.jboss.as] WFLYSRV0025: WildFly started
ブラウザーで http://localhost:8080 を開きます。ナビゲーションバーの Login リンクをクリックします。Auth0 のログインページにリダイレクトされます。認証後、プロフィールページ にリダイレクトされ、ユーザー情報と JWT クレームが表示されます。
このサンプルは JSP を使用しており、WildFly アプリケーションサーバーでテストされています。別の Java EE 8 互換コンテナを使用している場合は、一部の手順を調整する必要がある場合があります。
チェックポイントこれで、http://localhost:8080 で Auth0 によって保護された、完全に機能する Java EE アプリケーションが実行されているはずです。ユーザーはログイン、プロフィールの表示、ログアウトを行えます。

高度な使用例

Auth0JwtPrincipal は、任意のサーブレットで request.getUserPrincipal() を介して利用できます。ProfileServlet では、デコードされた IDトークン のクレームにアクセスする方法を示しています。
Principal principal = request.getUserPrincipal();

if (principal instanceof Auth0JwtPrincipal) {
    Auth0JwtPrincipal auth0JwtPrincipal = (Auth0JwtPrincipal) principal;
    DecodedJWT idToken = auth0JwtPrincipal.getIdToken();

    String name = idToken.getClaim("name").asString();
    String email = idToken.getClaim("email").asString();
    String picture = idToken.getClaim("picture").asString();
    String sub = idToken.getSubject();
}
IDトークン で一般的に使用できるクレーム:
  • name — ユーザーの表示名 (フルネーム)
  • email — ユーザーのメールアドレス
  • picture — ユーザーのプロフィール画像の URL
  • sub — ユーザーの一意な識別子 (Auth0 ユーザー ID)
LoginServlet で認可 URL を構築する際に、カスタムパラメーターを追加します。
src/main/java/com/auth0/example/web/LoginServlet.java
String authURL = authenticationController
        .buildAuthorizeUrl(request, response, callbackUrl)
        .withScope(config.getScope())
        .withAudience("https://your-api.example.com")
        .withParameter("screen_hint", "signup")
        .withParameter("ui_locales", "fr")
        .build();
特定の API 向けのアクセストークンをリクエストするには .withAudience() を使用します。Auth0 がサポートする追加の認可パラメーターを指定するには .withParameter() を使用します。
API 呼び出しで生のトークンにアクセスするには、トークンをセッションに保存するよう Auth0AuthenticationMechanism を変更します。
src/main/java/com/auth0/example/security/Auth0AuthenticationMechanism.java
if (isCallbackRequest(httpServletRequest)) {
    try {
        Tokens tokens = authenticationController.handle(
                httpServletRequest, httpServletResponse);

        httpServletRequest.getSession().setAttribute(
                "accessToken", tokens.getAccessToken());

        Auth0JwtCredential auth0JwtCredential =
                new Auth0JwtCredential(tokens.getIdToken());
        CredentialValidationResult result =
                identityStoreHandler.validate(auth0JwtCredential);
        return httpMessageContext.notifyContainerAboutLogin(result);
    } catch (IdentityVerificationException e) {
        return httpMessageContext.responseUnauthorized();
    }
}
次に、保護された API を呼び出す際にアクセストークンを取得します。
String accessToken = (String) request.getSession().getAttribute("accessToken");
URL url = new URL("https://your-api.example.com/data");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Authorization", "Bearer " + accessToken);
特定の Auth0 Organization にログインを制限するには、組織 ID または名前を指定して AuthenticationController を設定します。
src/main/java/com/auth0/example/security/Auth0AuthenticationProvider.java
@Produces
public AuthenticationController authenticationController(Auth0AuthenticationConfig config) {
    JwkProvider jwkProvider = new JwkProviderBuilder(config.getDomain()).build();
    return AuthenticationController.newBuilder(
                    config.getDomain(), config.getClientId(), config.getClientSecret())
            .withJwkProvider(jwkProvider)
            .withOrganization("org_YOUR_ORG_ID")
            .build();
}
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 引数版を使用していることを確認してください。
// 正しい例 — state に Cookie を使用
authenticationController.buildAuthorizeUrl(request, response, callbackUrl)
authenticationController.handle(httpServletRequest, httpServletResponse)
インジェクションの失敗や 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
<jboss-web>
    <security-domain>jaspitest</security-domain>
    <context-root>/</context-root>
</jboss-web>
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 サンプルアプリケーション

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