0

我在 10.3 版上创建了一个自定义 Weblogic 安全身份验证提供程序,其中包括一个用于验证用户的自定义登录模块。作为提供者的一部分,我实现了 ServletAuthenticationFilter 并添加了一个过滤器。过滤器充当域内所有应用程序的公共登录页面。

当我们通过在地址栏中输入任何安全 URL 来访问它们时,这在 IE 和 Firefox 中运行良好。但是当我们在 IE 中为链接添加书签时,会发生奇怪的事情。如果我单击书签,您将看到我们的登录页面,然后在您成功登录系统后,即使用户已经通过身份验证,也会显示基本身份验证页面。这在 Firefox 中永远不会发生,只有 IE 才会发生。也是断断续续的。5 次中有 1 次 IE 将正确重定向并且不显示基本身份验证窗口。Firefox 和 Opera 每次都会正确重定向。我们捕获了响应标头并比较了成功和失败,它们是相同的。

final boolean isAuthenticated = authenticateUser(userName, password, req);

        // Send user on to the original URL
        if (isAuthenticated) {
            res.sendRedirect(targetURL);
            return;
        }

如您所见,一旦用户通过身份验证,我就会重定向到原始 URL。有没有我错过的步骤?authenticateUser() 方法是从 Oracle 文档中的一个示例中逐字提取的。

private boolean authenticateUser(final String userName, final String password, HttpServletRequest request) {

    boolean results;

    try {
        ServletAuthentication.login(new CallbackHandler() {

            @Override
            public void handle(Callback[] callbacks)
                    throws IOException, UnsupportedCallbackException {

                for (Callback callback : callbacks) {
                    if (callback instanceof NameCallback) {
                        NameCallback nameCallback = (NameCallback) callback;
                        nameCallback.setName(userName);
                    }

                    if (callback instanceof PasswordCallback) {
                        PasswordCallback passwordCallback = (PasswordCallback) callback;
                        passwordCallback.setPassword(password.toCharArray());
                    }
                }
            }
        }, request);
        results = true;
    } catch (LoginException e) {
        results = false;
    }

    return results;

我在这里问这个问题是因为我不知道问题出在 Weblogic 配置还是代码上。如果这个问题更适合 ServerFault,请告诉我,我会在那里发布。

奇怪的是,它每次都可以在 Firefox 和 Opera 中运行,但不能在 Internet Explorer 中运行。我希望不使用 Internet Explorer 是一种选择,但它目前是公司的标准。任何帮助或方向将不胜感激。我已经针对 IE 6 和 8 进行了测试,并在 3 个不同的环境中部署了自定义提供程序,但我仍然可以重现该错误。

4

1 回答 1

1

我们想通了。

修复是禁用 weblogic 服务器上的身份验证 cookie。由于某种原因,Internet Explorer 会丢失 cookie,从而导致 Weblogic 认为会话被黑客入侵。这就是提示基本身份验证登录的原因。

我们仍然不知道是什么导致 IE 丢失了 cookie,但这个提供程序是针对 Intranet 的,因此修复不会损害我们的整体安全性。

我希望这对其他人有帮助。

于 2010-06-15T16:53:48.237 回答