Jakarta Authentication (旧 JASPIC)

目次

はじめに

Tomcat は Jakarta Authentication 3.0 を実装しています。この実装は主に、サードパーティ製の認証実装を Tomcat と統合できるようにすることを目的としています。

Jakarta Authentication は、次の 2 つの方法で設定できます。

  • コンテナレベルで、静的設定ファイル $CATALINA_BASE/conf/jaspic-providers.xml を使用します。この方法では、必要なすべてのクラスが Tomcat の Common クラスローダーから可視である必要があります。通常、これは JAR を $CATALINA_BASE/lib に配置することを意味します。
  • Web アプリケーションレベルで、Jakarta Authentication API を使用した動的設定を使用します。この方法では、必要なすべてのクラスが Web アプリケーションのクラスローダーから可視である必要があります。通常、これは JAR を Web アプリケーションの WEB-INF/lib ディレクトリに配置することを意味します。

静的な Jakarta Authentication 設定ファイルで特定の Web アプリケーションに対して Jakarta Authentication を構成する場合、その Jakarta Authentication 構成は、Web アプリケーションの WEB-INF/web.xml ファイルに存在する <login-config> よりも優先されることに注意してください。

静的設定

AuthConfigProvider

サードパーティ実装に AuthConfigProvider が含まれている場合、Web アプリケーションは、$CATALINA_BASE/conf/jaspic-providers.xml<jaspic-providers> 要素内に以下をネストすることで、それを使用するように構成できます。

<provider name="any"
          className="fully.qualified.implementation.class.Name"
          layer="HttpServlet"
          appContext="Catalina/localhost /contextPath"
          description="any">
  <property name="see-provider-documentation"
            value="see-provider-documentation" />
</provider>

name および description 属性は Tomcat では使用されません。

className 属性は、AuthConfigProvider の完全修飾クラス名である必要があります。実装は、Web アプリケーションまたは Tomcat の $CATALINA_BASE/lib ディレクトリにパッケージ化できます。

layer 属性は HttpServlet である必要があります。

appContext 属性は、次の連結である必要があります。

  • エンジン名
  • スラッシュ文字
  • ホスト名
  • 単一のスペース
  • コンテキストパス

AuthConfigProvider がプロパティによる構成をサポートしている場合、<provide> 要素内にネストされた <property> 要素を介して指定できます。

ServerAuthModule

サードパーティの実装が ServerAuthModule のみを提供する場合、いくつかのサポートクラスを提供する必要があります。これらはカスタム実装であるか、または Tomcat が ServerAuthModule の単純なラッパー実装を提供することもできます。

ServerAuthModule の Tomcat のラッパーは、$CATALINA_BASE/conf/jaspic-providers.xml<jaspic-providers> 要素内に以下をネストすることで構成できます。

<provider name="any"
          className="org.apache.catalina.authenticator.jaspic.SimpleAuthConfigProvider"
          layer="HttpServlet"
          appContext="Catalina/localhost /contextPath"
          description="any">
  <property name="org.apache.catalina.authenticator.jaspic.ServerAuthModule.1"
            value="fully.qualified.implementation.class.Name" />
  <property name="see-provider-documentation"
            value="see-provider-documentation" />
</provider>

構成は前のセクションの AuthConfigProvider に似ていますが、いくつかの重要な違いがあります。

className 属性は org.apache.catalina.authenticator.jaspic.SimpleAuthConfigProvider である必要があります。

ServerAuthModule は、プロパティを介して指定されます。プロパティ名は、org.apache.catalina.authenticator.jaspic.ServerAuthModule.n である必要があります。ここで、n はモジュールのインデックスです。インデックスは 1 から開始し、すべてのモジュールが定義されるまで 1 ずつインクリメントする必要があります。プロパティの値は、モジュールの完全修飾クラス名である必要があります。

動的設定

Jakarta Authentication モジュールと構成は、Web アプリケーションとともに WAR ファイルにパッケージ化できます。その後、Web アプリケーションは、標準の Jakarta Authentication API を使用して起動時に必要な Jakarta Authentication 構成を登録できます。

並列デプロイメントを使用している場合、動的構成を使用しないでください。Jakarta Authentication API は、コンテキストパスが特定のホストに対して一意であると想定していますが、並列デプロイメントを使用している場合はそうではありません。並列デプロイメントを使用する場合は、静的な Jakarta Authentication 構成を使用する必要があります。これには、アプリケーションのすべてのバージョンで同じ Jakarta Authentication 構成を使用する必要があります。

サードパーティモジュール

これは完全なリストではありません。Tomcat コミュニティは、このセクションに追加する貢献を歓迎します。

Philip Green II 氏による Google OAuth 2 用モジュール

このモジュールのソースコードと、必要な Google API 構成の詳細を含む ドキュメント は GitHub で入手できます。

このモジュールを Tomcat で使用するための構成例は次のようになります。

<jaspic-providers xmlns="https://tomcat.dokyumento.jp/xml"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="https://tomcat.dokyumento.jp/xml jaspic-providers.xsd"
                  version="1.0">
  <provider name="google-oauth"
            className="org.apache.catalina.authenticator.jaspic.SimpleAuthConfigProvider"
            layer="HttpServlet"
            appContext="Catalina/localhost /contextPath"
            description="Google OAuth test">
    <property name="org.apache.catalina.authenticator.jaspic.ServerAuthModule.1"
              value="com.idmworks.security.google.GoogleOAuthServerAuthModule" />
    <property name="oauth.clientid"
              value="obtained-from-Google-console" />
    <property name="oauth.clientsecret"
              value="obtained-from-Google-console" />
    <property name="ignore_missing_login_context"
              value="true" />
  </provider>
</jaspic-providers>