2009-12-28 12 views
22

Recientemente he agregado el inicio de sesión de OpenID a mi sitio web. Pero no sé cómo agregar la función de cierre de sesión.¿Cómo agregar la función de cierre de sesión a un sitio habilitado para OpenID?

Por ejemplo, al hacer clic en el botón Iniciar sesión, puedo mostrar el formulario de inicio de sesión del proveedor de OpenID seleccionado, por ejemplo, la Cuenta de Google. Sin embargo, no sé cómo implementar un botón Cerrar sesión para cerrar sesión en la cuenta de Google.

Por favor consejo.

Respuesta

12

La parte dependiente de OpenID no puede desconectar al usuario de la OP, solo puede implementar el cierre de sesión local. Al igual que RP no puede registrar al usuario en OP.

+0

Sí. Lo que está solicitando es una característica de cierre de sesión único, que OpenID no implementa. –

+2

OpenID no implementa esto, pero los principales proveedores de OpenID (tanto Google como Yahoo) _do_. –

1

Solo destruya la sesión.

+0

Publicación anterior, pero la destrucción de la sesión funcionó para mí. –

0

que estoy haciendo mi proyecto y atrapado en el problema de cierre de sesión No sé cómo hacer que al igual que He resuelto por restablecer todos los cookies porque no sé la cookie que establece la iniciando sesión en el estado necesito saberlo.

+0

Creo que al borrar todas las cookies se cerrará la sesión del usuario de todos los sitios web que ha iniciado sesión, digamos Google, Yahoo !, Facebook, etc. No estoy seguro de si estoy en lo correcto. ¿Puedes publicar el código? – Madhu

0

debe haber creado algunas variables de sesión después de una verificación exitosa del proveedor de OpenID, solo necesita destruir esas variables de sesión. No puede destruir la sesión creada por el proveedor de OpenID.

4

Creo que estás mezclando paradigmas (odio esa palabra, pero no puedo pensar en una mejor para usar en este momento). Su enlace de inicio de sesión envía al usuario a su proveedor de OpenID para la autenticación, pero no es el usuario que inicia sesión en su cuenta de Google lo que es importante, está iniciando sesión en su sitio web al proporcionar credenciales a través de OpenID. El usuario ya puede haber iniciado sesión en su proveedor de OpenID; usted no (no puede) saber y no tiene que importarle.

De forma similar, el enlace de cierre de sesión en su sitio debe desconectar al usuario de su sitio únicamente y devolverlo al mismo estado que tenía antes de hacer clic en el botón de inicio de sesión. El usuario ya puede haber cerrado sesión en su proveedor de OpenID; usted ni sabe ni le importa Este sitio es un buen ejemplo :).

+0

Si los dos paradigmas son 1) cerrar sesión y 2) cerrar sesión del proveedor de identidad, los usuarios de IMHO esperan el segundo cuando cierran sesión. ¿Qué usuario se preocupa por la sesión del servidor? Quieren asegurarse de que alguien no pueda acceder a su computadora, hacer clic en su sitio y crear una nueva sesión sin volver a autenticarse explícitamente. En esto, no estoy de acuerdo con el enfoque de SO para cerrar la sesión. Tal vez el término "cerrar sesión" ya no es válido para sitios web que usan SSO a favor de ??? single-logout? –

36

Los proveedores individuales de OpenID ofrecen diferentes URL para el cierre de sesión a las que se puede redirigir al usuario.

Google: https://www.google.com/accounts/Logout

Yahoo: https://login.yahoo.com/config/login?logout=1

ha habido un debate de permitir que los programas operativos para proporcionar estas URL como parte de la norma; ver this discussion en la lista de correo de OpenID.

+0

@Madhu: esta es la respuesta correcta. ¿Por qué no es aceptado? –

+8

Supongo que esas URL dejarán de aceptar solicitudes GET para cerrar la sesión muy pronto. No es nada divertido cuando cualquier sitio aleatorio puede cerrar la sesión de todos los servicios de google (y otros servicios autenticados por google) simplemente haciendo que su navegador haga una solicitud GET (por ejemplo, insertar imagen en una página, iframe, redirigir). Esa URL debe proporcionar una página de confirmación que contenga un botón de envío POST y protección CSRF. –

+2

@MikkoRantalainen bien, después de> 2 años, todavía funcionan bien. – Olli

1

Solo puede implementar el cierre de sesión local para OpenID. Como dijo Charles Duffy, siempre puedes usar URL específicas, pero eso se proporciona siempre que el usuario esté utilizando un proveedor para el que conoces la url de cierre de sesión. Eso puede ser frustrante si su usuario descubre que todas sus cuentas de Google están cerradas cuando cierran sesión en su sitio web.

La otra forma de ver el problema es si desea asegurarse de que la persona que inicia sesión en su sitio web siempre necesite ingresar su contraseña, en lugar de simplemente iniciar sesión cuando ya ha iniciado sesión en un proveedor de código abierto.

Este (en mi humilde opinión) proporciona una mayor seguridad si lo están utilizando desde una terminal pública. Esto asegurará que el usuario que está ingresando siempre necesite revalidar su contraseña.

Para hacer eso es realmente bastante simple, solo use la extensión PAPE openid.ns.pape = "http://specs.openid.net/extensions/pape/1.0".
openid.pape.max_auth_age = 0

como parte de la URL cuando inicia sesión en un proveedor de OpenID.

Más información aquí http://code.google.com/apis/accounts/docs/OpenID.html

+1

Al menos una vez, tuve un requisito comercial para que un usuario cierre la sesión de todas partes cuando se desconectaba de mi sitio web, aunque no fuera por otro motivo, porque así es como funciona el inicio de sesión único de Facebook. El hecho de que sea incómodo y molesto no significa que no sea un comportamiento "deseado". *suspiro*. –

1

A continuación se muestra un truco por el cual puedo cerrar la sesión de Google:

<iframe id="myIFrame" src="" style='display:none;' > 
function logOutGoogle(){ 
    document.getElementById('myIFrame').src='https://www.google.com/accounts/Logout'; 
    timeOut(); 
} 
+0

¿Qué es 'timeOut()'? – ecbrodie

Cuestiones relacionadas