在 Liberty JVM 服务器中对用户进行认证

虽然您可以为 Liberty JVM 服务器中运行的所有 Web 应用程序配置 CICS ® 安全性,但仅当 Web 应用程序包含安全性约束时,它才会认证用户。 安全性约束由应用程序开发者在 动态 Web 项目OSGi 应用程序项目的部署描述符 (web.xml) 中定义。 安全性约束定义了受保护的对象 (URL) 以及提供保护的角色。

<login-config> 元素定义了用户获取 Web 容器访问权的方式以及用于认证的方法。 受支持的方法包括 HTTP 基本认证、基于表单的认证或 SSL 客户机认证。 有关如何为 CICS 定义应用程序安全性的更多详细信息,请参阅 CICS Explorer 产品文档中的 "Explorer 连接的 SSL 安全性"。 以下是 web.xml 中的元素示例:
<!-- Secure the application -->
<security-constraint>
	<display-name>com.ibm.cics.server.examples.wlp.tsq.web_SecurityConstraint</display-name>
		<web-resource-name>com.ibm.cics.server.examples.wlp.tsq.web</web-resource-name>
		<description>Protection area for com.ibm.cics.server.examples.wlp.tsq.web</description>
		<url-pattern>/*</url-pattern>
	</web-resource-collection>
	<auth-constraint>
		<description>Only SuperUser can access this application</description>
		<role-name>SuperUser</role-name>
	</auth-constraint>
	<user-data-constraint>
		<!-- Force the use of SSL -->
		<transport-guarantee>CONFIDENTIAL</transport-guarantee>
	</user-data-constraint>
</security-constraint>

<!-- Declare the roles referenced in this deployment descriptor -->
<security-role>
	<description>The SuperUser role</description>
	<role-name>SuperUser</role-name>
</security-role>

<!--Determine the authentication method -->
<login-config>
		<auth-method>BASIC</auth-method>	
</login-config>
			
注: 如果使用 RequestDispatcher.forward () 方法将请求从一个 Servlet 转发到另一个 Servlet ,那么仅在从客户机请求的第一个 Servlet 上执行安全性检查。
在 CICS 中使用 Liberty 安全性认证的任务可以使用派生自任何 Liberty 应用程序安全性机制的用户标识来授权 CICS 中的事务和资源安全性检查。 根据以下条件确定 CICS 用户标识:
  1. Liberty 应用程序安全认证。
    除非使用分布式身份映射,否则与 SAF 用户注册表的集成是 CICS Liberty 安全性功能部件的一部分。 在 CICS 中支持 Liberty 支持的任何应用程序安全性机制,这包括 HTTP 基本认证,表单登录, SSL 客户机证书认证,使用定制登录模块的身份断言, JACC , JASPIC 或信任关联拦截器 (TAI)。 必须授予 Liberty 认证的所有 SAF 用户标识对 Liberty JVM 服务器 APPL 类概要文件的读访问权。 其名称由 Liberty 服务器配置文件 server.xml 中的 safCredentials 元素中的 profilePrefix 设置确定。
    <safCredentials profilePrefix="BBGZDFLT"/>

    CICS 终端用户还使用 APPL 类来控制对特定 CICS 区域的访问,并且 Liberty JVM 服务器可以根据您的安全需求使用与 CICS APPLID 相同的概要文件。 如果未指定此元素,那么将使用 BBGZDFLT 作为缺省 profilePrefix。

    您必须定义 APPLID,用户必须具有对此 APPLID 的访问权。 要在 APPL 类中配置并激活 BBGZDFLT 概要文件,请执行以下操作:
    RDEFINE APPL BBGZDFLT UACC(NONE)
    SETROPTS CLASSACT(APPL)
    必须授予用户对 APPL 类中的 BBGZDFLT 概要文件的读访问权才能进行认证。 要允许用户 AUSER 对 BBGZDFLT APPL 类概要文件进行认证,请执行以下操作:
    PERMIT BBGZDFLT CLASS(APPL) ACCESS(READ) ID(AUSER)
    必须授予未认证的 Liberty SAF 用户标识对 APPL 类概要文件的读访问权。 可以在 Liberty 服务器配置文件 server.xml 中的 safCredentials 元素内指定 SAF 未认证的用户标识。
    <safCredentials unauthenticatedUser="WSGUEST"/>
    如果未指定此元素,那么缺省 unauthenticatedUser 为 WSGUEST。 要允许 SAF 未认证的用户标识 WSGUEST 对 APPL 类中的 BBGZDFLT 概要文件进行读访问:
    PERMIT BBGZDFLT CLASS(APPL) ACCESS(READ) ID(WSGUEST)
    如果使用 WSGUEST ,那么应遵循以下步骤来配置 SAF 用户注册表,如 设置系统授权工具 (SAF) 未认证用户中所述。

    WLP z/OS® 系统安全访问域 (WZSSAD) 是指授予 Liberty 服务器的许可权。 这些许可权控制认证和授权用户时服务器有权查询的系统授权工具 (SAF) 应用程序域和资源概要文件。 必须在 WZSSAD 域中授予 CICS 区域用户标识许可权才能进行认证调用。 To grant permission to authenticate, the CICS region ID must be granted READ access to the BBG.SECPFX.<APPL> profile in the SERVER class:

    RDEFINE SERVER BBG.SECPFX.BBGZDFLT UACC(NONE)
    PERMIT BBG.SECPFX.BBGZDFLT CLASS(SERVER) ACCESS(READ) ID(cics_region_user)

    有关更多详细信息,请参阅 Liberty: 使用 WZSSAD 访问 z/OS 安全性资源

  2. 如果从 Liberty 提供未经认证的主体,那么将使用 URIMAP 中定义的 USERID。
  3. 如果 URIMAP 中未定义任何 USERID ,那么请求将以 CICS 缺省用户标识运行。
注:

由于在 CICS 事务连接处理期间延迟 Liberty 事务的安全性处理的方式,将按如下所示确定 CICS 监视设施 (CMF) 记录中使用的用户标识, z/OS 工作负载管理器 (WLM) 分类以及 XAPADMGR 出口的任务关联数据和 UEPUSID 全局用户出口字段; HTTP 安全性头中的用户标识,或者如果没有用户标识,那么将确定从匹配的 URIMAP 中获取的用户标识。 如果两者都不存在,那么将使用 CICS 缺省用户标识。

请注意, Liberty 会高速缓存已认证的用户标识,并且与 CICS 不同,不会在高速缓存周期内检查到期的用户标识。 您可以使用标准 Liberty 配置流程来配置高速缓存超时。 请参阅 在 Liberty 中配置认证高速缓存