本主题说明如何创建自己的认证令牌,它是在登录主题中设置的,并且在下游传播。
有关此任务
通过此实现,可以指定定制登录模块或应用程序可使用的认证令牌。 如果您要实现以下某个任务,考虑写您自己的实现:
- 将属性隔离在您自己的实现内。
- 使用定制序列化对信息进行序列化。 您必须反序列化目标中的字节,并将信息添加回线程。 本任务还可能包含加密和解密。
- 使用 getUniqueID 应用程序编程接口 (API) 影响主题的整体唯一性。
重要信息: WebSphere® Application Server 中的安全性运行时未使用定制认证令牌实现来实施认证。 WebSphere Application Security Runtime 仅在以下情况下使用此令牌:
- 调用 setBytes 方法以进行序列化
- 调用 getForwardable 方法以确定是否对认证令牌进行序列化。
- 调用 getUniqueId 方法以实现唯一性
- 调用 getName 和 getVersion 方法以将序列化字节添加到下游发送的令牌占位符。
所有其他使用都是定制实现。
要实现定制认证令牌,您必须完成以下步骤:
过程
- 编写 AuthenticationToken 接口的定制实现。
有许多不同的方法可用于实现 AuthenticationToken 接口。 但是,应确保完全实现
AuthenticationToken 接口和令牌接口所需的方法。 在实现此接口后,可以将它放入
app_server_root/classes 目录中。 或者,可将类放入任何专用目录。 但是,请确保 WebSphere Application Server 类装入器可以找到该类并授予其相应的许可权。 您可以将包含此类的 Java™ 归档 (JAR) 文件或目录添加到
server.policy 文件中,以便该类具有服务器代码所需的必需许可权。
提示: 传播框架定义的所有令牌类型都具有类似的接口。 令牌类型是实现
com.ibm.wsspi.security.token.Token 接口的标记接口。 此接口定义大多数方法。 如果您计划实现多个令牌类型,请考虑创建实现 com.ibm.wsspi.security.token.Token 接口的抽象类。 所有令牌实现(包括认证令牌 )都可能扩展抽象类,并且会完成大部分工作。
要查看 AuthenticationToken 接口的实现,请参阅 示例: com.ibm.wsspi.security.token.AuthenticationToken 实现。
- 在 WebSphere Application Server 登录期间添加和接收定制认证令牌。
本任务的实现通常是通过将定制登录模块添加到各种应用程序和系统登录配置。 但是,要反序列化信息,必须插入定制登录模块。 在登录模块中对该对象实例化后,那么可以在落实方法期间将该对象添加到主题。
如果只想将信息添加到要传播的主体集,请参阅 传播用于安全性属性传播的定制 Java 可序列化对象。 如果要确保传播此信息、执行自己的定制序列化,或者要对主题高速缓存指定唯一性,请考虑编写自己的认证令牌实现。
示例: 定制认证令牌登录模块中的代码样本显示了如何确定登录是初始登录还是传播登录。 这些登录类型之间的不同之处在于
WSTokenHolderCallback 回调是否包含传播数据。 如果回调不包含传播数据,那么初始化新的定制认证令牌实现,并将它设置到主题中。 如果回调包含传播数据,那么查找特定定制认证令牌
TokenHolder 实例,将字节数组转换回定制 AuthenticationToken 对象,并将它设置回主题中。 代码样本显示两个实例。
可在登录模块的落实阶段使认证令牌成为只读的。 如果您没有使令牌成为只读的,那么属性可添加到应用程序中。
- 将定制登录模块添加到已包含用于接收序列化版本的定制授权令牌的 com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule 登录模块的 WebSphere Application Server 系统登录配置。
因为此登录模块依赖于共享状态下由
com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule 登录模块添加的信息,所以在添加 com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule
登录模块后添加此登录模块。 有关如何将定制登录模块添加到现有登录配置的信息,请参阅“为 JAAS 的系统登录配置开发定制登录模块”。