实现定制传播令牌以进行安全性属性传播

本主题说明如何创建自己的传播令牌实现,它是在正在运行的线程中设置的,并且在下游传播。

有关此任务

缺省传播令牌通常足以传播并非特定于用户的属性。 如果您要实现以下某个任务,考虑写您自己的实现:
  • 将属性隔离在您自己的实现内。
  • 使用定制序列化对信息进行序列化。 您必须反序列化目标中的字节,并通过将定制登录模块插入入站系统登录配置,将信息添加回线程。 本任务还可能包含加密和解密。

要实现定制传播令牌,必须完成以下步骤:

过程

  1. 编写 PropagationToken 接口的定制实现。
    有许多不同的方法可用于实现 PropagationToken 接口。 但是,应确保完全实现 PropagationToken 接口和令牌接口所需的方法。

    [z/OS][AIX Solaris HP-UX Linux Windows]实现此接口后,可以将其放在app_server_root/classes目录。 或者,可将类放入任何专用目录。 但是,请确保 WebSphere® Application Server 类装入器可以找到该类,并且已向其授予相应的许可权。 您可以将包含此类的 Java™ 归档 (JAR) 文件或目录添加到 server.policy 文件中,以使其具有服务器代码所需的许可权。

    [IBM i]实现此接口后,可以将其放在profile_root/classes目录。 有关类的更多信息,请参阅 在概要文件中为定制类创建 classes 子目录

    提示: 传播框架定义的所有令牌类型都具有类似的接口。 令牌类型是实现 com.ibm.wsspi.security.token.Token 接口的标记接口。 此接口定义大多数方法。 如果您计划实现多个令牌类型,请考虑创建实现 com.ibm.wsspi.security.token.Token 接口的抽象类。 所有令牌实现(包括传播令牌 )都可能扩展抽象类,并且会完成大部分工作。

    要查看传播令牌的实现,请参阅 示例: com.ibm.wsspi.security.token.PropagationToken 实现

  2. 在 WebSphere Application Server 登录期间添加和接收定制传播令牌。
    本任务的实现通常是通过将定制登录模块添加到各种应用程序和系统登录配置。 您还可从应用程序添加实现。 但是,要对信息进行反序列化,必须 插入定制登录模块。 WSSecurityPropagationHelper 类具有用于在线程上设置传播令牌并从线程检索它以进行更新的 API。

    示例: 定制传播令牌登录模块 中的代码样本显示了如何确定登录是初始登录还是传播登录。 这些登录类型之间的不同之处在于 WSTokenHolderCallback 回调是否包含传播数据。 如果回调不包含传播数据,那么初始化新的定制传播令牌实现并在线程上对其进行设置。 如果回调包含传播数据,那么查找特定的定制传播令牌 TokenHolder 实例、将字节数组转换回定制 PropagationToken 对象,并在线程上对其进行设置。 代码样本显示两个实例。

    可在将定制传播令牌添加到线程期间随时添加属性。 如果您在请求和 getUniqueId 方法更改之间添加属性,那么使公共安全互操作性 V2 (CSIv2) 客户机会话无效,以便它向下游发送新的信息。 在请求之间添加属性会影响性能。 在许多情况下,您想要向下游发送请求以接收新的传播令牌信息。

    要将定制传播令牌添加到线程,请调用 WSSecurityPropagationHelper.addPropagationToken 方法。 该调用需要 WebSphereRuntimePerMission "setPropagationToken" Java 2 安全权限。

  3. 将定制登录模块添加到已包含 com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule 登录模块的系统登录配置 ,用于接收定制传播令牌的序列化版本
    还可将此登录模块添加到您可能想要在登录期间在线程上生成定制传播令牌的任何应用程序登录。 或者,可从应用程序内生成定制 PropagationToken 实现。 但是,要对其进行反序列化,您必须将此实现添加到系统登录模块中。

结果

在完成这些步骤后,您已实现定制 PropagationToken。