¿Cómo cerrar sesión en una aplicación donde utilicé OAuth2 para iniciar sesión con Google?

Resuelto Vinesh EG asked hace 12 años • 12 respuestas

En mi aplicación, implementé el cierre de sesión de Google usando jsapi.

Utilicé la URL https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx para conectarme a Google y luego https://www.googleapis.com/plus/v1/people/xxxxxx para obtener datos del usuario desde el perfil de google.

Ahora necesito cerrar la sesión del usuario en Google mientras hago clic en un botón de mi aplicación. ¿Cómo puedo implementar esto en JavaScript? O al menos debe preguntar a la página de inicio de sesión de Google cada vez que el usuario inicia sesión.

Lo he intentado approval_prompt=force, pero parece que no funciona.

Vinesh EG avatar Oct 16 '12 14:10 Vinesh EG
Aceptado

Descripción general de OAuth: ¿Es el usuario quien dice ser?:

No estoy seguro de si usaste OAuth para iniciar sesión en Stack Overflow, como la opción "Iniciar sesión con Google", pero cuando usas esta función, Stack Overflow simplemente le pregunta a Google si sabe quién eres:

"Yo Google, este tipo de Vinesh afirma que [email protected] es él, ¿es cierto?"

Si ya has iniciado sesión, Google dirá SÍ. Si no, Google dirá:

"Espera un segundo Stack Overflow, autenticaré a este tipo y si puede ingresar la contraseña correcta para su cuenta de Google, entonces es él".

Cuando ingresa su contraseña de Google, Google le dice a Stack Overflow que usted es quien dice ser y Stack Overflow lo registra.

Cuando cierras sesión en tu aplicación, estás cerrando sesión en tu aplicación:

Aquí es donde los desarrolladores nuevos en OAuth a veces se confunden un poco... Google y Stack Overflow, Assembla, la-muy-cool-slick-webapp de Vinesh, son entidades diferentes, y Google no sabe nada acerca de su cuenta en la genial aplicación web de Vinesh, y viceversa. viceversa, aparte de lo que se expone a través de la API que estás utilizando para acceder a la información del perfil.

Cuando su usuario cierra sesión, no cierra sesión en Google, sino en su aplicación, Stack Overflow, Assembla o cualquier aplicación web que haya utilizado Google OAuth para autenticar al usuario.

De hecho, puedo cerrar sesión en todas mis cuentas de Google y seguir conectado a Stack Overflow. Una vez que su aplicación sepa quién es el usuario, esa persona puede cerrar sesión en Google. Google ya no es necesario.

Dicho esto, lo que estás pidiendo es cerrar la sesión del usuario en un servicio que realmente no te pertenece. Piénselo así: como usuario, ¿qué tan molesto cree que me sentiría si iniciara sesión en 5 servicios diferentes con mi cuenta de Google y luego, la primera vez que cierre sesión en uno de ellos, tenga que iniciar sesión en mi cuenta de Gmail? nuevamente porque el desarrollador de la aplicación decidió que, cuando cierre sesión en su aplicación, también debería cerrar sesión en Google. Eso envejecerá muy rápido. En resumen, realmente no quieres hacer esto ...

Sí, sí, lo que sea, todavía quiero cerrar la sesión del usuario en Google, solo dime ¿cómo hago esto?

Dicho esto, si aún desea cerrar la sesión de un usuario en Google y se da cuenta de que es muy posible que esté interrumpiendo su flujo de trabajo, puede crear dinámicamente la URL de cierre de sesión desde uno de sus botones de cierre de sesión de servicios de Google y luego invocarla usando un elemento img o una etiqueta script:

<script type="text/javascript" 
    src="https://mail.google.com/mail/u/0/?logout&hl=en" />

O

<img src="https://mail.google.com/mail/u/0/?logout&hl=en" />

O

window.location = "https://mail.google.com/mail/u/0/?logout&hl=en";

Si redirige a su usuario a la página de cierre de sesión o la invoca desde un elemento que no está restringido entre dominios, se cerrará la sesión del usuario en Google.

Tenga en cuenta que esto no significa necesariamente que se cerrará la sesión del usuario en su aplicación, solo en Google. :)

Resumen:

Lo que es importante que tengas en cuenta es que, cuando cierras sesión en tu aplicación, no necesitas que el usuario vuelva a ingresar una contraseña. ¡Ese es todo el punto! Se autentica contra Google para que el usuario no tenga que ingresar su contraseña una y otra vez en cada aplicación web que utiliza. Se necesita algo de tiempo para acostumbrarse, pero sepa que, siempre que el usuario inicie sesión en Google, su aplicación no necesita preocuparse por si el usuario es quien dice ser o no.

Tengo la misma implementación en un proyecto que tú, usando la información del perfil de Google con OAuth. Intenté exactamente lo mismo que estás buscando probar, y realmente comenzó a enojar a la gente cuando tenían que iniciar sesión en Google una y otra vez, así que dejamos de cerrarles la sesión en Google. :)

jamesmortensen avatar Oct 16 '2012 07:10 jamesmortensen

Puede cerrar sesión y redirigir a su sitio:

var logout = function() {
    document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}
lgabster avatar Sep 15 '2016 12:09 lgabster