Java 容器授权合同 (JACC)

Liberty 支持基于 Java Authorization Contract for Containers (JACC) 规范的授权以及缺省授权。 在 Liberty 中启用安全性时,除非指定了 JACC 提供程序,否则将使用缺省授权。

关于此任务

JACC 使第三方安全提供程序能够在应用程序服务器中管理授权。 缺省授权不需要特殊的设置,且缺省授权引擎作出所有授权决策。 但是,如果配置并设置了 JACC 提供程序以供 Liberty 使用,那么会将所有企业 Bean 和 Web 授权决策委派给 JACC 提供程序。 JACC 定义应用程序服务器与授权策略模块之间的安全合同。 这些合同指定如何在访问决策中安装,配置和使用授权提供程序。 要将 jacc-1.5 功能部件添加到 Liberty 服务器,请添加不属于 Liberty 的第三方 JACC 提供程序。

您可以通过实现 Liberty 服务器中提供的 com.ibm.wsspi.security.authorization.jacc.ProviderService 接口,开发 JACC 提供程序以具有 Java EE 应用程序的定制授权决策。 JACC 规范 JSR 115 定义了授权提供程序的接口。 在 Liberty 服务器中,必须将 JACC 提供程序打包为用户功能部件。 您的功能部件必须实现 com.ibm.wsspi.security.authorization.jacc.ProviderService 接口。

过程

  1. 创建 OSGi 捆绑软件项目 以开发 Java 类。
    您的项目可能有编译错误。 要修正这些错误,需要导入两个软件包 javax.security.jacccom.ibm.wsspi.security.authorization.jacc

    编辑文件 MANIFEST.MF 以导入缺少的包:

    Manifest-Version: 1.0
    Service-Component: OSGI-INF/myjaccExampleComponent.xml,
    Bundle-ManifestVersion: 2
    Bundle-Name: com.example.myjaac.osgiBundle
    Bundle-SymbolicName: com.example.myjaac.osgiBundle
    Bundle-Version: 1.0.0
    Bundle-RequiredExecutionEnvironment: JavaSE-1.7
    Import-Package: com.ibm.wsspi.security.authorization.jacc;version="1.0.0",
    javax.security.jacc;version="1.5.0"

    服务组件 XML 的示例 myjaccExampleComponent.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" 
     name="TestPolicyServiceProvider">
        <implementation class="com.example.myjaac.osgiBundle.TestPolicyServiceProvider"/>
        <property name="javax.security.jacc.policy.provider" type="String" value=""/>
        <property name="javax.security.jacc.PolicyConfigurationFactory.provider" type="String" value=""/>
        <service>
            <provide interface="com.ibm.wsspi.security.authorization.jacc.ProviderService"/>
        </service>
    </scr:component>
  2. 在功能部件清单文件中的 Subsystem-Content 下,创建 Liberty 功能部件项目以将先前的 OSGi 捆绑软件添加到用户 Liberty 功能部件。
  3. 优化功能部件清单以添加必需的 OSGi 子系统内容: com.ibm.ws.javaee.jacc.1.5; version="[1,1.0.200)"; location:="dev/api/spec/"
    Subsystem-ManifestVersion: 1.0
    IBM-Feature-Version: 2
    IBM-ShortName: jacc15CICSLiberty-1.0
    Subsystem-SymbolicName: com.example.myjaac.libertyFeature;visibility:=public
    Subsystem-Version: 1.0.0
    Subsystem-Type: osgi.subsystem.feature
    Subsystem-Content: com.example.myjaac.osgiBundle;version="1.0.0",
     com.ibm.ws.javaee.jacc.1.5;version="[1,1.0.200)";location:="dev/api/spec/"
    Manifest-Version: 1.0

    如果需要再添加一个 Subsystem-Content ,那么必须在输入内容之前至少添加一个 space 。 如果不添加 space,那么 CICS® 将返回 java.lang.IllegalArgumentException

  4. 将 Liberty 功能部件项目导出为 Liberty 功能部件 (ESA) 文件。
  5. 通过 FTP 将 ESA 文件传输到 zFS。
  6. 使用 installUtility 命令安装 ESA 文件。
    ./wlpenv installUtility install myFeature.esa
  7. jacc-1.5 功能部件和包含 JACC 提供程序的 ESA 文件作为用户功能部件添加到 server.xml
    <feature>jacc-1.5</feature>
    <feature>usr:jacc15CICSLiberty-1.0</feature>