Jakarta 认证(以前称为 JASPIC)
目录
简介
Tomcat 实施了 Jakarta 认证 3.0。该实施主要旨在启用第三方认证实施与 Tomcat 的集成。
Jakarta 认证可以通过两种方式之一进行配置
- 通过静态配置文件
$CATALINA_BASE/conf/jaspic-providers.xml
在容器级别。使用此方法,所有必需的类都必须对 Tomcat 的公共类加载器可见,这通常意味着将 JAR 放置在$CATALINA_BASE/lib
中。 - 通过使用 Jakarta 认证 API 进行动态配置在 Web 应用程序级别。使用此方法,所有必需的类都必须对 Web 应用程序类加载器可见,这通常意味着将 JAR 放置在 Web 应用程序的
WEB-INF/lib
目录中。
用户应注意,如果静态 Jakarta 认证配置文件为给定的 Web 应用程序配置了 Jakarta 认证,那么 Jakarta 认证配置将优先于 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>
Tomcat 不使用 name
和 description
属性。
className
属性必须是 AuthConfigProvider
的完全限定类名。该实施可以与 Web 应用程序或 Tomcat 的 $CATALINA_BASE/lib
目录打包在一起。
layer
属性必须是 HttpServlet
。
appContext
属性必须完全是以下内容的连接
- 引擎名称
- 正斜杠字符
- 主机名
- 一个空格
- 上下文路径
如果 AuthConfigProvider
支持通过属性进行配置,则可以通过嵌套在 <provide>
元素中的 <property>
元素指定这些属性。
ServerAuthModule
如果第三方实现仅提供 ServerAuthModule
,则需要提供一些支持类。这些类可以是自定义实现,或者 Tomcat 为 ServerAuthModule
提供了一个简单的包装器实现。
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
通过属性指定。属性名称必须为 org.apache.catalina.authenticator.jaspic.ServerAuthModule.n
,其中 n
是模块的索引。索引必须从 1 开始,并以 1 为步长递增,直到定义所有模块。属性的值必须是模块的完全限定类名。
动态配置
Jakarta Authentication 模块和配置可以打包到 WAR 文件中,以及 Web 应用程序。然后,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.net.cn/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://tomcat.net.cn/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>