1

我有两个应用程序在 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。或者是吗?

4

1 回答 1

0

你是对的,因为你已经有了用户信息,所以不需要回调(用于基于表单的身份验证)。就 WAS 设置而言,您必须自己决定。是一个非常好的教程。

但是您是否考虑过使用更简单的SSO机制来持久化身份验证。WAS 配置文件/服务器之间的上下文?

于 2013-06-07T22:37:32.080 回答