无法从oracle sso注销

zvokhttg  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(437)

我正在构建一个j2eeweb应用程序,它使用oraclesso和一个oid后端作为对用户进行身份验证的手段。
如果用户想使用该应用程序,首先必须在sso的登录页提供有效的登录/密码。
当用户使用完应用程序后,他可以单击注销按钮;在幕后,与此按钮相关联的操作将使用户的会话无效,并使用以下java代码清除Cookie:

private void clearCookies(HttpServletResponse res, HttpServletRequest req) {
    res.setContentType("text/html");
    for (Cookie cookie : req.getCookies()) {
        cookie.setMaxAge(0);
        cookie.setPath("/");
        cookie.setDomain(req.getHeader("host"));
        res.addCookie(cookie);
    }
}

另外,我还有一个与logout按钮关联的onclick javascript事件,它应该通过调用deloblixcookie()函数来删除sso cookie(在一些oracle论坛中可以找到):

function delCookie(name, path, domain) {
  var today = new Date();
  // minus 2 days
  var deleteDate = new Date(today.getTime() - 48 * 60 * 60 * 1000);
  var cookie = name + "="
    + ((path == null) ? "" : "; path=" + path)
    + ((domain == null) ? "" : "; domain=" + domain)
    + "; expires=" + deleteDate;
  document.cookie = cookie;
}

function delOblixCookie() {
  // set focus to ok button
  var isNetscape = (document.layers);
  if (isNetscape == false || navigator.appVersion.charAt(0) >= 5) {
    for (var i=0; i<document.links.length; i++) {
      if (document.links.href == "javascript:top.close()") {
        document.links.focus();
        break;
      }
    }
  }
  delCookie('ObTEMC', '/');
  delCookie('ObSSOCookie', '/');

  // in case cookieDomain is configured delete same cookie to all subdomains
  var subdomain;
  var domain = new String(document.domain);
  var index = domain.indexOf(".");
  while (index > 0) {
    subdomain = domain.substring(index, domain.length);
    if (subdomain.indexOf(".", 1) > 0) {
      delCookie('ObTEMC', '/', subdomain);
      delCookie('ObSSOCookie', '/', subdomain);
    }
    domain = subdomain;
    index = domain.indexOf(".", 1);
  }
}

但是,我的用户在单击“注销”按钮后不会从sso注销:尽管如果他们尝试访问索引页,会创建一个新会话,但sso登录页不会显示给他们,他们可以直接转到主页面而无需进行身份验证。只有当他们从浏览器中手动删除cookies时,登录页面才会再次出现-这不是我需要的:用户每次从应用程序中注销时都必须提供他们的登录/密码,因此我相信删除cookies的代码中一定有错误。
我非常感谢您对这个问题的任何帮助,提前谢谢。

tuwxkamq

tuwxkamq1#

您需要一个名为logout的页面,其中包含这些javascript函数。
文件上是这么说的:
webgate在收到包含“logout.”(包括“.”)的url时注销用户,logout.gif和logout.jpg除外,例如logout.html或logout.pl。当webgate收到带有此字符串的url时,obssocookie的值设置为“logout”。

8wigbo56

8wigbo562#

oracle有两个web sso产品—oracle access manager和oracle single sign-on。您发布的javascript代码是针对accessmanager的,因此对您没有帮助。此外,您不需要在javascript中执行任何操作来注销用户。
看看osso文档的注销部分。建议使用以下代码:

// Clear application session, if any
String l_return_url := return url to your application
response.setHeader( "Osso-Return-Url", l_return_url);
response.sendError( 470, "Oracle SSO" );
rxztt3cl

rxztt3cl3#

在浏览器关闭之前,cookies不会“删除”。

相关问题