Java EE连接器安全

Java™ 2 平台,Enterprise Edition( Java EE ) 连接器体系结构定义了用于连接的标准体系结构J2EE异构企业信息系统(EIS)。 EIS 的示例包括企业资源规划 (ERP)、大型机事务处理 (TP) 和数据库系统。

连接器体系结构使 EIS 供应商能够为其 EIS 提供标准的资源适配器。 资源适配器是 Java 应用程序用来连接 EIS 的系统级软件驱动程序。 资源适配器插入到应用程序服务器中并使 EIS、应用程序服务器和企业应用程序能够相互连接。 在 EIS 中访问信息时,通常要求进行访问控制以防止未经授权的访问。 J2EE 应用程序必须向 EIS 认证才能建立连接。

J2EE 连接器安全性体系结构旨在将基于 J2EE 的应用程序的端到端安全模型扩展为支持与 EIS 环境集成。 应用程序服务器与 EIS 共同确保对资源主体(它与底层 EIS 建立连接)进行正确的认证。 虽然可以定义其他机制,但连接器体系结构将下列机制标识为普遍支持的认证机制:
  • BasicPassword:基于用户和密码的基本认证机制(此机制特定于 EIS)
  • [AIX Solaris HP-UX Linux Windows][IBM i]Kerbv5:Kerberos基于版本 5 的身份验证机制

应用程序在部署描述符中的 resource-ref 元素中定义是使用应用程序管理的登录还是使用容器管理的登录。 每个 resource-ref 元素描述单个连接工厂引用绑定。 resource-ref 元素中的 res-auth 元素(其值为 ApplicationContainer)指示企业 Bean 代码是否可以执行登录或者应用程序服务器是否可以使用主体映射配置来登录到资源管理器。 resource-ref 元素通常在组装应用程序时使用组装工具定义。 也可以在部署时定义或重新定义 resource-ref

应用程序管理的登录

要访问 EIS 系统,应用程序需要从 Java 命名和目录接口 (JNDI) 命名空间中找到一个连接工厂,然后调用getConnection该连接工厂对象上的方法。 getConnection 方法可能需要用户标识和密码参数。 J2EE 应用程序可以将用户标识和密码传递给 getConnection 方法,该方法接着将此信息传递给资源适配器。 但是,在应用程序代码中指定用户标识和密码可能会对安全性产生一定威胁。

如果用户 ID 和密码被编码到 Java 源代码中,则组织内的开发人员和测试人员可以获得它们。 此外,如果用户反编译 Java 类,他们就可以看到用户 ID 和密码。

如果不首先更改代码,那么无法更改用户标识和密码。 此外,应用程序代码可以从持久存储器或外部服务检索用户标识和密码集。 此方法要求 IT 管理员使用特定于应用程序的机制来配置和管理用户标识和密码。

为了访问此认证数据,应用程序服务器支持对资源指定组件管理的认证别名。 此认证数据是所有资源引用的公共数据。 点击资源>资源适配器>J2C连接工厂>配置名称。 选择“使用组件管理的认证别名”。

res-auth=Application 时,认证数据是按以下顺序从下列元素中获取的:
  1. 传递给 getConnection 方法的用户标识和密码
  2. 连接工厂或数据源中组件管理的认证别名
  3. 数据源中的用户名和密码定制属性

最初可以在资源适配器归档 (RAR) 文件中定义用户名和密码属性。

[AIX Solaris HP-UX Linux Windows][z/OS]还可以在管理控制台中定义这些属性,或者使用 wsadmin 脚本从自定义属性中定义这些属性。

[IBM i]请不要使用允许用户连接到资源的定制属性。

容器管理的登录

目标企业信息系统 (EIS) 的用户标识和密码可以由应用程序服务器提供。 该产品提供了容器管理的登录功能。 应用程序服务器查找目标 EIS 的正确认证数据,以使客户机能够建立连接。 如果将应用程序配置为使用容器管理的登录,应用程序代码就不必在 getConnection 调用中提供用户标识和密码,对资源的所有引用也不必使用相同的认证数据。 使用 Java 身份验证和授权服务 (JAAS)可插入身份验证机制,使用预配置JAAS登录配置,以及LoginModule将正在运行的线程上的客户端安全身份和凭证映射到预先配置的用户 ID 和密码。

该产品支持缺省的多对一凭证映射 LoginModule 模块,该模块将正在运行的线程中的任何客户机标识映射至所指定目标 EIS 的预先配置的用户标识和密码。 默认映射模块是一个特殊用途的JAASLoginModule返回一个模块PasswordCredential由配置的 Java 2 连接器指定的凭据 ( J2C) 身份验证数据输入。 缺省映射 LoginModule 模块执行表查询,但不执行实际的认证。 用户标识和密码与别名一起存储在 J2C 认证数据列表中。

这J2C身份验证数据列表位于 Java 身份验证的全局安全面板上,并且授权服务>J2C身份验证数据。 缺省主体和凭证映射功能是由 DefaultPrincipalMapping 应用程序 JAAS 登录配置定义的。

使用管理控制台修改的 J2C 认证数据将在修改内容被保存到存储库并在执行“测试连接”后生效。 此外,通过进行 wsadmin 脚本编制修改的 J2C 认证数据将在对给定应用程序服务器进程启动或重新启动任何应用程序后生效。 通过调用 SecurityAdmin MBean 方法 updateAuthDataCfg 来使修改后的 J2C 认证数据生效。 将 HashMap 参数设置为 NULL 以使 Securityadmin MBean 能够使用存储库中最新的值来刷新 J2C 认证数据。

由于该产品增强了这个频繁使用的缺省映射配置的性能,因此请不要修改 DefaultPrincipalMapping 登录配置。 该产品不支持修改 DefaultPrincipalMapping 配置、更改缺省 LoginModule 模块或者在配置中堆叠定制 LoginModule 模块。

[z/OS]在z/OS®平台,如果不存在用户 ID 和密码,或者默认使用别名,则WebSphere® Application Server运行时在主题中搜索系统授权工具 (SAF) 用户 ID。

对于大多数系统,使用多对一映射的缺省方法已足够了。 但是,该产品支持定制主体和凭证映射配置。 通过创建具有唯一名称的新 JAAS 登录配置,可以将定制映射模块添加到应用程序登录 JAAS 配置中。 例如,定制映射模块可以提供一一映射或 Kerberos 功能。

可信连接也提供了一一映射,同时支持客户机标识传播。 此外,通过利用DB2®受信任上下文对象,受信任的连接可以利用连接池来减少因关闭和重新打开具有不同身份的连接而产生的性能损失。 使用受信任的连接还可以增强您的DB2无需将所有权限都分配给单个用户。 连接由其凭证受信任的用户建立DB2服务器打开连接,然后同一个用户也被信任来断言访问该服务器的其他用户的身份DB2服务器。 已经创建了称为 TrustedConnectionMapping 的新映射配置以实现可信连接。

您还可以使用WebSphere Application Server管理控制台将资源管理器连接工厂引用绑定到已配置的资源工厂之一。 如果应用程序部署描述符中的 res-auth 元素值是 Container,那么必须指定映射配置。 要指定映射配置,请使用应用>应用程序类型>WebSphere企业应用程序>应用程序名称面板。 请参阅主题“将资源引用映射至引用”,以了解其他指导。

J2C 映射模块和映射属性

映射模块是特殊的 JAAS LoginModule,它提供主体和凭证映射功能。 您可以使用管理控制台来定义和配置定制映射模块。

也可以通过使用每个 JAAS 登录配置中的登录选项来定义上下文数据并将该数据传递给映射模块。 在该产品中,还可以使用每个连接工厂引用绑定中的映射属性来定义上下文数据。

为每个 JAAS 登录配置定义的登录选项由所有使用相同 JAAS 登录配置和映射模块的资源共享。 为每个连接工厂引用绑定定义的映射属性由该资源引用独占使用。

考虑使用外部映射服务的使用方案。

例如,您可以使用 Tivoli® Access Manager 全局登录 (GSO) 服务。 使用 Tivoli Access Manager GSO 来定位两个后端服务器的认证数据。

您有两个 EIS 服务器: DB2和MQ。 认证数据DB2不同于MQ, 然而。 在映射中使用登录选项JAAS登录配置指定建立与 Tivoli Access Manager GSO 服务的连接所需的参数。 使用连接工厂引用绑定中的映射属性来指定哪台 EIS 服务器需要用户标识和密码。

有关开发映射模块的更多详细信息,请参阅主题“J2C 主体映射模块”。

注:
  • 连接工厂上的映射配置已移到资源管理器连接工厂引用。 使用开发的映射登录模块WebSphere Application Server版本 5JAAS回调类型可以由资源管理器连接工厂引用使用,但映射登录模块不能利用自定义映射属性功能。
  • 连接工厂引用绑定支持映射属性,并通过新的 WSMappingPropertiesCallback 回调方法将那些属性传递给映射 LoginModule。 另外,WSMappingPropertiesCallback 回调方法和新的 WSManagedConnectionFactoryCallback 回调方法是在 com.ibm.wsspi 包中定义的。 请将新的映射登录模块与新的回调类型配合使用。

使用入站 SecurityContext 来保护消息传递

通过使用安全性流入上下文,可由 EIS 资源适配器将安全性信息提供给应用程序服务器。 安全性流入上下文机制允许工作管理器使用已确认身份执行 Work 实例的操作。 这些行动包括向Java EE消息端点在应用程序服务器的安全域中配置的身份下作为消息驱动 Bean (MDB) 进行处理。

注意力:安全流入上下文仅支持 JCA1.6-compliant资源适配器。 目前,此产品未提供支持安全性流入上下文的内置资源适配器。 使用入站SecurityContext为了确保消息传递的安全,需要支持以下资源适配器: Java EE消息传递和安全流入上下文。

保护将消息传递至消息端点的操作要求在全局安全性配置中启用全局安全性。 还要求在主管该应用程序(它提供此消息端点 MDB)的应用程序服务器上启用应用程序安全性。 有关全局安全性的更多信息,请参阅主题全局安全设置

必须使用与应用程序领域(即作用域为应用程序的安全域的用户注册表)中的用户身份相关联的角色来配置应用程序部署描述符的安全策略。 此安全性配置启用 EJB 安全性并授权应用程序领域中的特定用户身份访问 MDB 方法。 有关安全概述的更多信息,请参阅主题,安全

保护消息传递还要求资源适配器定义 WorkContextProvider 和 SecurityContext 接口的实现。 要传递安全消息,资源适配器首先应提交一个提供 SecurityContext 实现的 Work 实例,工作管理器使用此实现来建立该 Work 实例的执行主体集。

在确定执行主体时,SecurityContext可以提供 Java 容器身份验证服务提供程序接口 (JASPIC) 回调的实现,工作管理器可以使用该回调来确定调用者和组身份(CallerPrincipalCallback,GroupPrincipalCallback)并验证呼叫者身份和密码(PasswordValidationCallback)。 如果调用者身份在应用程序领域中,那么工作管理器会通过构造包含调用者主体、任何组主体和所有专用凭证的 WSSubject 实例来断言该身份。

或者,SecurityContext 可提供充当另一登录或认证模块创建的 WSSubject 实例的执行主体集。 仅当此 WSSubject 实例的调用者主体在应用程序领域或可信领域中时,工作管理器才接受此实例。 有关领域的更多信息,请参阅主题为多个安全域配置入站信任领域

每当无法建立 WSSubject 实例时,工作管理器会拒绝 Work 实例。 否则,它会将受管线程上的该实例分配到已断言或接受的 WSSubject 实例下。 如果 SecurityContext 未提供调用者身份,那么 Work 实例会分派到包含未认证调用者主体的 WSSubject 实例下。

分派时,Work 实例可能会尝试将消息传递至受保护应用程序的 MDB。 所有消息会传递至为该 Work 实例建立的 WSSubject 实例。 每当 WSSubject 实例的调用者主体与应用程序部署描述符中声明的角色相关联时,EJB 安全性协调程序就会提供对 MDB 的 onMessage 方法的访问。 否则,此协调程序会拒绝访问并且消息传递失败。 传递期间,此 MDB 可使用 EJB 上下文方法 isCallerInRole 和 getCallerPrincipal 来制定其他访问决策,并且此 MDB 可能会访问安全域中此调用者主体对其具有授权的其他实体。