Jakarta Authentication (旧称 JASPIC)

目次

はじめに

TomcatはJakarta Authentication 3.1を実装しています。この実装は主に、サードパーティの認証実装を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が含まれている場合、$CATALINA_BASE/conf/jaspic-providers.xml<jaspic-providers>要素内に次をネストすることで、Webアプリケーションがそれを使用するように設定できます。

<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がServerAuthModulesのためのシンプルなラッパー実装を提供しています。

TomcatのServerAuthModule用ラッパーは、$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(s)はプロパティを介して指定されます。プロパティ名は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>