Java EE 连接器安全性
Java™ 2 Platform, Enterprise Edition (Java EE) 连接器体系结构定义了一种用于将 J2EE 连接到异构企业信息系统 (EIS) 的标准体系结构。EIS 的示例包括企业资源规划 (ERP)、大型机事务处理 (TP) 和数据库系统。
连接器体系结构使 EIS 供应商能够为其 EIS 提供标准的资源适配器。资源适配器是系统级的软件驱动程序,Java 应用程序使用它来连接到 EIS。资源适配器插入到应用程序服务器中并使 EIS、应用程序服务器和企业应用程序能够相互连接。在 EIS 中访问信息时,通常要求进行访问控制以防止未经授权的访问。J2EE 应用程序必须向 EIS 认证才能建立连接。
- BasicPassword:基于用户和密码的基本认证机制(此机制特定于 EIS)
Kerbv5:基于 Kerberos V5 的认证机制
应用程序在部署描述符中的 resource-ref 元素中定义是使用应用程序管理的登录还是使用容器管理的登录。每个 resource-ref 元素描述单个连接工厂引用绑定。resource-ref 元素中的 res-auth 元素(其值为 Application 或 Container)指示企业 Bean 代码是否可以执行登录或者应用程序服务器是否可以使用主体映射配置来登录到资源管理器。resource-ref 元素通常在组装应用程序时使用组装工具定义。也可以在部署时定义或重新定义 resource-ref。
应用程序管理的登录
要访问 EIS 系统,应用程序在 Java 命名和目录接口 (JNDI) 名称空间中找到连接工厂,并对该连接工厂对象调用 getConnection 方法。getConnection 方法可能需要用户标识和密码参数。J2EE 应用程序可以将用户标识和密码传递给 getConnection 方法,该方法接着将此信息传递给资源适配器。但是,在应用程序代码中指定用户标识和密码可能会对安全性产生一定威胁。
如果将用户标识和密码编码到 Java 源代码中,那么对组织中的开发者和测试员可用。并且,如果用户对 Java 类进行反编译,那么用户标识和密码对他们来说也是可视的。
如果不首先更改代码,那么无法更改用户标识和密码。此外,应用程序代码可以从持久存储器或外部服务检索用户标识和密码集。此方法要求 IT 管理员使用特定于应用程序的机制来配置和管理用户标识和密码。
为了访问此认证数据,应用程序服务器支持对资源指定组件管理的认证别名。此认证数据是所有资源引用的公共数据。单击
。选择“使用组件管理的认证别名”。- 传递给 getConnection 方法的用户标识和密码
- 连接工厂或数据源中组件管理的认证别名
- 数据源中的用户名和密码定制属性
最初可以在资源适配器归档 (RAR) 文件中定义用户名和密码属性。
这些属性也可以在管理控制台中定义或者在定制属性中使用 wsadmin 脚本编制来定义。
请不要使用允许用户连接到资源的定制属性。
容器管理的登录
目标企业信息系统 (EIS) 的用户标识和密码可以由应用程序服务器提供。该产品提供了容器管理的登录功能。应用程序服务器查找目标 EIS 的正确认证数据,以使客户机能够建立连接。如果将应用程序配置为使用容器管理的登录,应用程序代码就不必在 getConnection 调用中提供用户标识和密码,对资源的所有引用也不必使用相同的认证数据。该产品使用 Java认证和授权服务 (JAAS) 可插入认证机制来使用预先配置的 JAAS 登录配置,并使用 LoginModule 来将正在运行的线程中的客户机安全标识和凭证映射至预先配置的用户标识和密码。
该产品支持缺省的多对一凭证映射 LoginModule 模块,该模块将正在运行的线程中的任何客户机标识映射至所指定目标 EIS 的预先配置的用户标识和密码。缺省映射模块是作特殊用途的 JAAS LoginModule 模块,它返回由已配置的 Java 2 连接器 (J2C) 认证数据条目指定的 PasswordCredential 凭证。缺省映射 LoginModule 模块执行表查询,但不执行实际的认证。用户标识和密码与别名一起存储在 J2C 认证数据列表中。
J2C 认证数据列表位于“全局安全性”面板上的 Java 认证和
中。缺省主体和凭证映射功能是由 DefaultPrincipalMapping 应用程序 JAAS 登录配置定义的。使用管理控制台修改的 J2C 认证数据将在修改内容被保存到存储库并在执行“测试连接”后生效。此外,通过进行 wsadmin 脚本编制修改的 J2C 认证数据将在对给定应用程序服务器进程启动或重新启动任何应用程序后生效。通过调用 SecurityAdmin MBean 方法 updateAuthDataCfg 来使修改后的 J2C 认证数据生效。将 HashMap 参数设置为 NULL 以使 Securityadmin MBean 能够使用存储库中最新的值来刷新 J2C 认证数据。
由于该产品增强了这个频繁使用的缺省映射配置的性能,因此请不要修改 DefaultPrincipalMapping 登录配置。该产品不支持修改 DefaultPrincipalMapping 配置、更改缺省 LoginModule 模块或者在配置中堆叠定制 LoginModule 模块。
在 z/OS® 平台上,如果不存在用户标识和密码,或者缺省为别名,那么 WebSphere® Application Server 运行时会在主体集中搜索系统授权工具 (SAF) 用户标识。
对于大多数系统,使用多对一映射的缺省方法已足够了。但是,该产品支持定制主体和凭证映射配置。通过创建具有唯一名称的新 JAAS 登录配置,可以将定制映射模块添加到应用程序登录 JAAS 配置中。例如,定制映射模块可以提供一一映射或 Kerberos 功能。
可信连接也提供了一一映射,同时支持客户机标识传播。除了利用 DB2® 可信上下文对象以外,可信连接还可以利用连接池来减少由于使用其他标识关闭和重新打开连接而带来的性能损失。使用可信连接还可以避免向单个用户分配所有特权,从而增强了 DB2 数据库的安全性。连接是由其凭证受 DB2 服务器信任并因此能够打开连接的用户建立的,随后还可以信任该用户来声明从应用程序中访问 DB2 服务器的其他用户的标识。已经创建了称为 TrustedConnectionMapping 的新映射配置以实现可信连接。
还可以使用 WebSphere Application Server 管理控制台来将资源管理器连接工厂引用绑定到其中一个已配置的资源工厂。如果应用程序部署描述符中的 res-auth 元素值是 Container,那么必须指定映射配置。要指定映射配置,请使用 面板上“引用”下的“资源引用”链接。请参阅主题“将资源引用映射至引用”,以了解其他指导。
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 V5 JAAS 回调类型开发的映射登录模块可以由资源管理器连接工厂使用,但映射登录模块无法利用定制映射属性功能。
- 连接工厂引用绑定支持映射属性,并通过新的 WSMappingPropertiesCallback 回调方法将那些属性传递给映射 LoginModule。另外,WSMappingPropertiesCallback 回调方法和新的 WSManagedConnectionFactoryCallback 回调方法是在 com.ibm.wsspi 包中定义的。请将新的映射登录模块与新的回调类型配合使用。
使用入站 SecurityContext 来保护消息传递
通过使用安全性流入上下文,可由 EIS 资源适配器将安全性信息提供给应用程序服务器。安全性流入上下文机制允许工作管理器使用已确认身份执行 Work 实例的操作。这些操作包括使用在应用程序服务器的安全域中配置的身份将消息传递至作为消息驱动的 Bean (MDB) 处理的 Java EE 消息端点。
保护将消息传递至消息端点的操作要求在全局安全性配置中启用全局安全性。还要求在主管该应用程序(它提供此消息端点 MDB)的应用程序服务器上启用应用程序安全性。有关全局安全性的更多信息,请参阅“全局安全性设置”主题。
必须使用与应用程序领域(即范围为应用程序的安全域的用户注册表)中的用户身份相关联的角色来配置应用程序部署描述符的安全策略。此安全性配置启用 EJB 安全性并授权应用程序领域中的特定用户身份访问 MDB 方法。 有关安全性概述的更多信息,请参阅“安全性”主题。
保护消息传递还要求资源适配器定义 WorkContextProvider 和 SecurityContext 接口的实现。要传递安全消息,资源适配器首先应提交一个提供 SecurityContext 实现的 Work 实例,工作管理器使用此实现来建立该 Work 实例的执行主体集。
建立执行主体集时,SecurityContext 可提供工作管理器用于确定调用者和组身份(CallerPrincipalCallback 和 GroupPrincipalCallback)并认证调用者身份和密码 (PasswordValidationCallback) 的 Java 认证服务提供程序容器接口 (JASPIC) 回调的实现。如果调用者身份在应用程序领域中,那么工作管理器会通过构造包含调用者主体、任何组主体和所有专用凭证的 WSSubject 实例来断言该身份。
或者,SecurityContext 可提供充当另一登录或认证模块创建的 WSSubject 实例的执行主体集。仅当此 WSSubject 实例的调用者主体在应用程序领域或可信领域中时,工作管理器才接受此实例。有关领域的更多信息,请参阅“为多个安全域配置入站可信领域”主题。
每当无法建立 WSSubject 实例时,工作管理器会拒绝 Work 实例。否则,它会将受管线程上的该实例分配到已断言或接受的 WSSubject 实例下。如果 SecurityContext 未提供调用者身份,那么 Work 实例会分派到包含未认证调用者主体的 WSSubject 实例下。
分派时,Work 实例可能会尝试将消息传递至受保护应用程序的 MDB。所有消息会传递至为该 Work 实例建立的 WSSubject 实例。每当 WSSubject 实例的调用者主体与应用程序部署描述符中声明的角色相关联时,EJB 安全性协调程序就会提供对 MDB 的 onMessage 方法的访问。否则,此协调程序会拒绝访问并且消息传递失败。传递期间,此 MDB 可使用 EJB 上下文方法 isCallerInRole 和 getCallerPrincipal 来制定其他访问决策,并且此 MDB 可能会访问安全域中此调用者主体对其具有授权的其他实体。