我有两个应用程序在 WAS 7.0 服务器的单个实例中运行,其中一个是 IBM Business Space(在本例中无关紧要,但无论如何),另一个是我正在开发的 RESTful 服务。这两个应用程序都与 FileNet 内容引擎交互。我知道业务空间使用 JAAS 来利用身份验证和授权任务,我的服务也是如此。要求是在访问服务时,使用已登录到 Business Space 的用户的安全 token 从服务内执行对 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: Error: no CallbackHandler available to get authentication information
假设回调授权成功,这意味着由于某种原因服务无法检索所需的 JAAS 主题。
我错过了什么?
<小时/>此外,我在 IBM 网站上发现了以下声明:
One of the advantages inherent to the EJB transport layer is the ability to leverage Java™ Authentication and Authorization Service (JAAS)-based authentication.
但是,它并没有说明在使用 WS 传输时不可能利用 JAAS。或者是吗?
最佳答案
你是对的,因为你已经有了用户信息,所以不需要回调(用于基于表单的身份验证)。 至于 WAS 设置,您必须自己决定。 Here是一个非常好的教程。
但是您是否考虑过使用更简单的 SSO持久验证的机制。 WAS 配置文件/服务器之间的上下文?
关于java - 与 FileNet 内容引擎交互的 Web 服务中的 JAAS 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16978477/