2009-11-03 3 views
4

Je suis en train de créer une application Web J2EE qui utilise Oracle SSO avec un backend d'OID comme moyen d'authentification des utilisateurs.Impossible de se déconnecter d'Oracle SSO

Si un utilisateur souhaite utiliser l'application, il doit d'abord fournir un nom d'utilisateur/mot de passe valide sur la page de connexion SSO. Lorsque l'utilisateur a fini d'utiliser l'application, il peut cliquer sur le bouton de déconnexion; dans les coulisses, l'action associée à ce bouton annule la session de l'utilisateur et efface les témoins en utilisant le code Java suivant:

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

, j'ai aussi un événement JavaScript onclick associé au bouton de fermeture de session, qui est censé supprimer les cookies d'authentification unique en appelant la fonction delOblixCookie() (que l'on trouve dans certains forum 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); 
    } 
} 

Cependant, mes utilisateurs ne sont pas automatiquement déconnecté de SSO après avoir frappé le bouton de fermeture de session: bien qu'une nouvelle session est créé si ils essaient d'accéder à la page d'index, la page de connexion SSO ne leur est pas présentée et ils peuvent aller directement à la page principale sans avoir à s'authentifier. Seulement si elles suppriment manuellement les cookies du navigateur, la page de connexion apparaît à nouveau - pas ce dont j'ai besoin: les utilisateurs doivent fournir leur identifiant/mot de passe chaque fois qu'ils se déconnectent de l'application, donc je crois qu'il doit y avoir quelque chose code qui supprime les cookies.

J'apprécierais grandement toute aide avec ce problème, merci d'avance.

Répondre

3

Oracle dispose de deux produits Web SSO: Oracle Access Manager et Oracle Single Sign On. Le code Javascript que vous avez posté est pour Access Manager, donc cela ne vous aidera pas. De plus, vous ne devriez pas avoir besoin de faire quoi que ce soit en Javascript pour vous déconnecter de l'utilisateur. Consultez la section logout des documents OSSO. Il recommande d'utiliser le code suivant:

// 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"); 
0

Les cookies ne "suppriment" pas jusqu'à ce que le navigateur soit fermé.

1

Vous avez besoin d'une page, avec un nom de fermeture de session, qui comprend les fonctions JavaScript.

C'est ce que le documentation dit:

Le WebGate enregistre un utilisateur quand il reçoit une URL contenant « fermeture de session. » (y compris le "."), à l'exception de logout.gif et logout.jpg, par exemple, logout.html ou logout.pl. Lorsque le WebGate reçoit une URL avec cette chaîne, la valeur de ObSSOCookie est définie sur pour se «déconnecter»

Questions connexes