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>