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,則 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>

Tomcat 不會使用 namedescription 屬性。

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(s) 透過屬性指定。屬性名稱必須是 org.apache.catalina.authenticator.jaspic.ServerAuthModule.n,其中 n 是模組的索引。索引必須從 1 開始,並以 1 為步長遞增,直到定義所有模組。屬性的值必須是模組的完全限定類別名稱。

動態配置

Jakarta 驗證模組和設定可以封裝在 WAR 檔案中,並與 Web 應用程式一起使用。然後,Web 應用程式可以在啟動時使用標準的 Jakarta 驗證 API 註冊所需的 Jakarta 驗證設定。

如果使用平行部署,則不應使用動態設定。Jakarta 驗證 API 假設內容路徑對於任何特定主機都是唯一的,這在使用平行部署時並非如此。使用平行部署時,應使用靜態 Jakarta 驗證設定。這需要所有版本的應用程式使用相同的 Jakarta 驗證設定。

第三方模組

這不是一個詳盡的清單。Tomcat 社群歡迎對此節內容的貢獻。

Philip Green II 的 Google OAuth 2 模組

此模組的原始程式碼以及包含必要的 Google API 設定詳細資訊的 文件 可在 GitHub 上取得。

使用此模組與 Tomcat 的範例設定如下所示

<jaspic-providers xmlns="https://tomcat.dev.org.tw/xml"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="https://tomcat.dev.org.tw/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>