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