سؤال

أنا أقوم ببناء تطبيق ويب J2EE الذي يستخدم Oracle SSO مع نهاية OID ظهر كوسيلة للمصادقة للمستخدمين.

إذا أراد المستخدم استخدام التطبيق، فيجب عليه تقديم تسجيل دخول / كلمة مرور سارية المفعول في صفحة تسجيل الدخول الخاصة ب SSO.

عند إجراء المستخدم باستخدام التطبيق، قد انقر فوق الزر "تسجيل الخروج"؛ وراء الكواليس، يبطل الإجراء المرتبط بهذا الزر جلسة المستخدم ومسح ملفات تعريف الارتباط باستخدام رمز Java التالي:

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);
    }
}

أيضا، لدي حدث JavaScript OnClick المرتبط بزر تسجيل الخروج، والذي من المفترض حذف ملفات تعريف الارتباط SSO عن طريق استدعاء دالة DeloBlixCookie () (كما يوجد في بعض منتدى 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 لم يتم تقديمها إليهم ويمكنهم الذهاب مباشرة إلى الرئيسية الصفحة دون الحاجة إلى المصادقة. فقط إذا قاموا بإحذف ملفات تعريف الارتباط يدويا من المتصفح، فإن صفحة تسجيل الدخول تظهر مرة أخرى - وليس ما أحتاجه: يجب على المستخدمين تقديم تسجيل الدخول / كلمة المرور الخاصة بهم في كل مرة يتم تسجيلها من التطبيق، لذلك أعتقد أنه يجب أن يكون هناك خطأ في الرمز الذي يحذف ملفات تعريف الارتباط.

كنت أقدر بشكل كبير أي مساعدة في هذه المشكلة، شكرا مقدما.

هل كانت مفيدة؟

المحلول

لدى Oracle منتجات ويب SSO - إدارة Oracle Access و Oracle Single Sign On. يعد رمز 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" );

نصائح أخرى

تحتاج إلى صفحة، باسم تسجيل خروج, وهذا يتضمن وظائف جافا سكريبت تلك.

هذا ما توثيق يقول:

يقوم WebGate بتسجيل مستخدم خارج عند تلقي عنوان URL يحتوي على "تسجيل الخروج". (بما في ذلك ".")، مع استثناءات Logout.gif و Logout.jpg، على سبيل المثال، Logout.html أو Logout.pl. عندما يتلقى WebGate عنوان URL مع هذه السلسلة، يتم تعيين قيمة Obssocookie على "تسجيل الخروج".

ملفات تعريف الارتباط لا "حذف" حتى يتم إغلاق المتصفح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top