WebSphere Application Server 中的 JACC 支持

WebSphere® Application Server 支持 Java™ Authorization Contract for Containers (JACC) 规范,此规范使第三方安全提供程序能够处理 Java Platform, Enterprise Edition (Java EE) 授权。

JACC 规范要求应用程序服务器中的容器和提供程序都满足某些要求。在应用程序部署期间,明确要求容器 将安全策略信息传播到提供程序,并调用提供程序以作出所有授权决策。在应用程序部署期间,提供程序需要 将策略信息存储在它们的存储库中。然后,当容器调用提供程序时,提供程序使用此信息来作出授权决策。

JACC 访问决策

当启用了安全性并且访问企业 Bean 或 Web 资源时,Enterprise JavaBeans (EJB) 容器或 Web 容器会调用安全运行时,以对是否允许访问作出授权决策。当使用外部提供程序时,将访问决策委派给该提供程序。

根据 Java Authorization Contract for Containers (JACC) 规范,创建适当的许可权对象,注册适当的策略上下文处理程序,并设置适当的策略上下文标识 (contextID)。发出对由提供程序实现的 java.security.Policy 对象方法的调用,以作出访问决策。

下列各节如何对企业 Bean 和 Web 资源调用提供程序。

企业 Bean 的访问决策

当启用安全性时,如果访问 EJB 方法,那么 EJB 容器将授权检查委派给安全运行时。如果启用了 JACC,那么安全运行时使用以下过程来执行授权检查:
  1. 使用 Bean 名称、方法名称、接口名称和方法特征符来创建 EJBMethodPermission 对象。
  2. 创建上下文标识,并使用 PolicyContext.setContextID(contextID) 方法在线程上设置该上下文标识。
  3. 注册必需的策略上下文处理程序,包括主体集策略上下文处理程序。
  4. 使用主体集中的主体来创建 ProtectionDomain 对象。如果不存在主体,那么传递 NULL 来作为主体名称。
  5. 通过调用 Policy 对象的 implies 方法将访问决策委派给 JACC 提供程序,这是由提供程序实现的。将 EJBMethodPermission 和 ProtectionDomain 对象传递给此方法。
  6. 除了创建 EJBRoleRefPermission 对象而不创建 EJBMethodPermission 对象之外,isCallerInRole 访问检查也遵循相同的过程。

Web 资源的访问决策

当启用安全性并将其配置为使用 JACC 提供程序时,如果访问 Web 资源(例如,Servlet 或 JavaServer Pages (JSP) 文件),那么安全运行时通过以下过程将委派决策授权给 JACC 提供程序:
  1. 创建 WebResourcePermission 对象以了解是否清除了 URI。如果提供程序执行“每个人”主体集,那么还应 该在这里选择它。
    1. 使用访问的 urlPattern 和 HTTP 方法来构造 WebResourcePermission 对象。
    2. 创建具有 null 主体名称的 ProtectionDomain 对象。
    3. 使用许可权和保护域调用 JACC 提供程序 Policy.implies 方法。如果清除了 URI 访问或者授予了对“每个人”主体集的访问权,那么提供程序允许在 implies 方法中进行访问(返回 true)。然后,在不 进行进一步检查的情况下授予访问权。
  2. 如果在上一步中未授予访问权,那么会创建 WebUserDataPermission 对象以了解是阻止、排除统一资源标识 (URI) 还是必须使用 HTTPS 协议重定向统一资源标识 (URI)。
    1. 使用访问的 urlPattern、调用的 HTTP 方法和请求的传输类型来构造 WebUserDataPermission 对象。如果请求基于 HTTPS,那么将传输类型设置为 CONFIDENTIAL;否则,传递 null。
    2. 创建具有 null 主体名称的 ProtectionDomain 对象。
    3. 使用许可权和保护域调用 JACC 提供程序 Policy.implies 方法。如果请求正在使用 HTTPS 协议并且 implies 方法返回 false,那么会返回 HTTP 403 错误,意味着已排除/阻止许可权。在这种情况下,不再执行进一步检查。如果请求未使用 HTTPS 协议,并且 implies 返回 false,那么会通过 HTTPS 重定向该请求。
  3. 安全运行时尝试认证用户。如果认证信息(例如,LTPA 令牌)已存在,那么使用它。否则,必须输入用户的凭证。
  4. 验证用户凭证之后,执行最后的授权检查,以了解是否已将对 URI 的访问特权授予用户。
    1. 像步骤 1 中那样创建 WebResourcePermission 对象。现在,ProtectionDomain 对象包含正在尝试访问 URI 的主体。Subject 策略上下文处理程序还包含用户信息,可以使用该信息来进行访问检查。
    2. 使用 Permission 对象和先前创建的 ProtectionDomain 对象来调用提供程序的 implies 方法。如果已 授予用户访问资源的许可权,那么 implies 方法将返回 true。如果未授予用户访问权,那么 implies 方法将返回 false
即使后来更改了先前列示的顺序(例如,为了提高性能),最终结果也是相同的。例如,如果阻止或排 除了资源,那么最终结果是无法访问该资源。

有关这些访问许可权的更多信息,请参阅 JSR-000115 Java Authorization Contract for Containers(V1.5 维护版)。

使用主体集中的信息来作出访问决策

如果提供程序依赖 WebSphere Application Server 生成的主体集来作出访问决 策,那么提供程序可以查询主体集中的公用凭证以获取 WSCredential 凭证。使用 WSCredential API 来获取有 关用户的信息,包括名称和用户所属的组。使用此信息来作出访问决策。

如果提供程序将必需的信息 添加至主体集,那么 WebSphere Application Server 可以使用该信息来作出访问决策。提供程序可以通过使用“信任关联接口”功能或者通过将登录模块插入 Application Server 来添加信息。

『安全性属性传播』一 节中包含有关如何将 WebSphere Application Server 需要的信息添加至主体集的更多信息。有关更多信息,请参阅在应用程序服务器之间传播安全性属性

JACC 中的动态模块更新

WebSphere Application Server 支持在某些情况下动态更新 Web 模块。如果更新或删除了 Web 模块,或者已将 Web 模块添加至应用程序,那么只有该模块会相应地停止或启动。应用程序中的其他现有模块不受影响,也不会停止然后重新启动应用程序。

当使用缺省授权引擎时,在 Web 模块中修改任何安全策略,并停止然后重新启动应用程序。当使用基于 Java Authorization Contract for Containers (JACC) 的授权时,该行为取决于提供程序支持的功能。如果提供程序可以处理对 Web 模块的动态更改,那么仅影响这些 Web 模块。否则,会停止并重新启动整个应用程序,以使 Web 模块中的新更改生效。

提供程序可以通过在 JACC 配置模型中配置支持动态模块更新选项来表 明它是否支持动态更新(有关更多信息,请参阅使用 Tivoli Access Manager 来授予对 Java EE 资源的访问权)。可以使用管理控制台或通过编制脚本来启用或禁用此选项。期望多数提供程序将策略信息存储在它们的外部存储库中,这样就可以使它们支持这些动态更新。 缺省情况下,对于大多数提供程序都应启用此选项。

当启用了支持动态模块更新选项时,如果动态添加、修改或删除包含安全角色的 Web 模块,那么仅会影响和重新启动特定 Web 模块。如果禁用此选项 ,那么将重新启动整个应用程序。当执行动态更新时,受影响的模块的安全策略信息将被传播到提供程序。有关 安全策略传播的更多信息,请参阅 JACC 策略传播

初始化 JACC 提供程序

如果 Java Authorization Contract for Containers (JACC) 提供程序需要在服务器启动期间执行初始化(例如,使客户机代码能够与服务器代码通信),那么该提供程序可以实现 com.ibm.wsspi.security.authorization.InitializeJACCProvider 接口。请参阅支持 JACC 的接口,以了解更多信息。

当实现此接口时,在服务器启动期间调用它。将 JACC 配置模型中的任何定制属性传播到此实现的 initialize 方法。可以使用管理控制台或通过编制脚本来输入定制属性。

服务器关闭期间,调用 cleanup 方法进行提供 程序所需的清除工作。严格来说,此接口的实现是可选的,并且仅当服务器启动期间提供程序需要初始化时才 使用它。

混合节点环境和 JACC

使用 Java Authorization Contract for Containers (JACC) 的授权是 WebSphere Application Server V6 中的新功能,并且它已增强为 WebSphere Application Server V9 中的最新 JACC 规范 V1.5。

JACC 配置是在单元级别设置的,它适用于该单元中的所有节点和服务器。

如果您打算使用基于 JACC 的授权 V1.5 功能,那么单元中必须只包含 V9 和更高版本的节点。此限制意味着,对于基于单元中的最低受支持版本的基于 JACC 的授权,此授权支持在 V9 或更高版本的单元中包含 V8.5.x 或更低版本的节点的混合节点环境。在本例中,此授权是基于 JACC 的授权 V1.4。


指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=csec_jaccsupport
文件名:csec_jaccsupport.html