【发布时间】:2013-06-03 10:17:21
【问题描述】:
我有两个应用程序在 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 中的基本身份验证方法使用特定于浏览器的对话框提示用户输入凭据
- jaas.conf 文件的路径,指定使用哪个 LoginModule 类实现
当我测试这个解决方案时,它失败并出现以下错误:
javax.security.auth.login.LoginException: 错误:没有可用于获取身份验证信息的 CallbackHandler
如果回调授权成功,这意味着由于某种原因服务无法检索所需的 JAAS 主题。
我错过了什么?
另外,我在 IBM 网站上看到了以下声明:
EJB 传输层固有的优势之一是能够利用基于 Java™ 身份验证和授权服务 (JAAS) 的身份验证。
但是,它并没有说明在使用 WS 传输时不可能利用 JAAS。还是这样?
【问题讨论】:
-
您使用 WSI 传输,而不是 EJB 传输,我是否理解正确?
-
fnt,是的,我正在使用 WSI。
-
不清楚您的服务是如何访问的以及从哪里访问的。它是对远程 HTTP 端点的调用吗?请澄清这一点并显示代码。
标签: java websphere jaas filenet-p8 filenet-content-engine