使用堆栈化 JAAS 登录模块来替换 UsernameToken 使用者的认证方法
缺省情况下,Web Service 安全性 UsernameToken 使用者 UNTConsumeLoginModule 总是针对 WebSphere 注册表来验证令牌中包含的用户名和密码。您可以使用 GenericSecurityTokenFactory 提供的 SPI 来绕过此认证方法。
关于此任务
如果要替换 UNTConsumeLoginModule 所使用的认证方法,那么必须提供您自己的定制 JAAS 登录模块才能执行认证。定制登录模块堆叠在定制 JAAS 配置中的 UNTConsumeLoginModule 下。UNTConsumeLoginModule 使用并验证令牌 XML。对提供给用户名和密码的值进行的验证,会延迟到定制堆栈化登录模块。
因为在假定将对用户名和密码进行认证的情况下使用 UNTConsumeLoginModule,所以对打算用来执行此功能的堆栈化登录模块的要求,高于仅打算用来提供动态令牌功能的登录模块。
要向 UNTConsumeLoginModule 指示它不应该对用户名和密码进行认证,您必须在所配置的回调处理程序上设置下列属性:
com.ibm.wsspi.wssecurity.token.UsernameToken.authDeferred=true
类似于大多数 WS-Security 登录模块,UNTConsumeLoginModule 总是将使用的令牌放入堆栈中所有登录模块都可以访问的共享状态映射内。如果指定 authDeferred=true,那么在落实阶段,UNTConsumeLoginModule 会确保最初置于共享状态的同一个 UsernameToken 对象,已放入另一个处于共享状态下的位置。如果找不到此 UsernameToken 对象,那么会发生 LoginException。因此,在回调处理程序上设置 authDeferred=true 时,必须让随附的登录模块将令牌恢复为共享状态。