我有两个应用程序在 WAS 7.0 服务器的单个实例中运行,其中一个是 IBM Business Space(在这种情况下无关紧要,但无论如何),另一个是我正在开发的 RESTful 服务。这两个应用程序都与 FileNet 内容引擎交互。我知道 Business Space 使用 JAAS 来利用身份验证和授权任务,我的服务也是如此。要求是,在访问服务时,使用已经登录到业务空间的用户的安全令牌从服务内执行对 FileNet 的请求。我对 JAAS 机制没有深入了解,可能会出错,但快速谷歌搜索说可以获取登录用户的 JAAS 主题并将其传递给我的服务的 UserContext。我正在使用的代码如下:
if (userContext == null) {
userContext = UserContext.get();
if (userContext.getSubject() == null) {
LoginContext loginContext = new LoginContext("config");
loginContext.login();
userContext.pushSubject( loginContext.getSubject() );
}
}
UserContext.set(userContext);
对应的 JAAS 配置文件:
config {
com.filenet.api.util.WSILoginModule required;
};
我有以下问题:
- 如果我不想提示用户输入凭据(如果他尚未登录到 Business Space 应用程序),我是否应该将回调处理程序传递给 LoginContext 构造函数?
- 我是否必须调整任何 WAS 设置才能使此方案正常工作?
更新
我已经设置:
- web.xml 中的 BASIC auth 方法使用特定于浏览器的对话框提示用户输入凭据
- jaas.conf 文件的路径,指定要使用的 LoginModule 类的实现
当我测试此解决方案时,它失败并出现以下错误:
javax.security.auth.login.LoginException:错误:没有可用于获取身份验证信息的 CallbackHandler
如果回调授权成功,这意味着由于某种原因服务无法检索所需的 JAAS 主题。
我错过了什么?
另外,我在 IBM 网站上看到了以下声明:
EJB 传输层固有的优势之一是能够利用基于 Java™ 身份验证和授权服务 (JAAS) 的身份验证。
但是,它并没有说明在使用 WS 传输时不可能利用 JAAS。或者是吗?