Descripción general de OAuth: ¿Es el usuario quien dice ser ?:
No estoy seguro de si usó OAuth para iniciar sesión en Stack Overflow, como la opción "Iniciar sesión con Google", pero cuando usa esta función, Stack Overflow simplemente le pregunta a Google si sabe quién es usted:
"Yo, Google, este tipo de Vinesh afirma que [email protected] es él, ¿es cierto?"
Si ya inició sesión, Google dirá SÍ. Si no, Google dirá:
"Espere 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 es quien dice ser, y Stack Overflow lo conecta.
Cuando cierra la sesión de su aplicación, está cerrando la sesión de su aplicación:
Aquí es donde los desarrolladores nuevos en OAuth a veces se confunden un poco ... Google y Stack Overflow, Assembla, la aplicación web muy elegante y elegante de Vinesh son entidades diferentes, y Google no sabe nada sobre su cuenta en la aplicación web genial de Vinesh, y viceversa. viceversa, aparte de lo que se expone a través de la API que está utilizando para acceder a la información del perfil.
Cuando su usuario cierra sesión, él o ella no se desconecta de Google, él / ella está desconectando su aplicación, o Stack Overflow, o Assembla, o cualquier aplicación web que use Google OAuth para autenticar al usuario.
De hecho, puedo cerrar sesión en todas mis cuentas de Google y aún así iniciar sesión en Stack Overflow. Una vez que su aplicación sepa quién es el usuario, esa persona puede cerrar la sesión de Google. Google ya no es necesario.
Dicho esto, lo que está pidiendo hacer es desconectar al usuario de un servicio que realmente no le pertenece. Piénselo así: Como usuario, ¿qué tan molesto crees que estaría si iniciara sesión en 5 servicios diferentes con mi cuenta de Google, luego la primera vez que me desconecté de uno de ellos, tengo que iniciar sesión en mi cuenta de Gmail? nuevamente porque el desarrollador de la aplicación decidió que, cuando cierre la sesión de su aplicación, también debería cerrar la sesión de Google? Eso envejecerá muy rápido. En resumen, realmente no quieres hacer esto ...
Yeh yeh, lo que sea, todavía quiero desconectar al usuario de 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 los botones de cierre de sesión de los servicios de Google y luego invocarlo usando un elemento img o una etiqueta de 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 lo invoca desde un elemento que no está restringido entre dominios, el usuario cerrará la sesión de 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 tenga en cuenta es que, cuando cierra la sesión de su aplicación, no es necesario 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 esté conectado a Google, su aplicación no tiene que preocuparse por si el usuario es o no quien dice ser.
Tengo la misma implementación en un proyecto que tú, usando la información del perfil de Google con OAuth. Probé exactamente lo mismo que estás buscando probar, y realmente comenzó a enojar a la gente cuando tuvieron que iniciar sesión en Google una y otra vez, así que dejamos de desconectarlos de Google. :)
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"; }
fuente
Para mí, funciona (java - android)
void RevokeAcess() { try{ HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/revoke?token="+ACCESS_TOKEN); org.apache.http.HttpResponse response = client.execute(post); } catch(IOException e) { } CookieManager.getInstance().removeAllCookie(); // this is clear the cookies which tends to same user in android web view }
Tienes que llamar a esta función en AsyncTask en Android
fuente
Simplemente puede crear un botón de cierre de sesión y agregarle este enlace, que cerrará la sesión de la aplicación y lo redireccionará al sitio deseado:
https://appengine.google.com/_ah/logout?continue=http://www.YOURSITE.com
simplemente alterna TU SITIO con tu sitio web
fuente
Esto funciona para cerrar la sesión del usuario en la aplicación, pero no en Google.
var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); });
Fuente: https://developers.google.com/identity/sign-in/web/sign-in
fuente
AuthInstance
que usaste. Su propia fuente dice ... " Puede permitir que los usuariosOuath simplemente hace que la instancia de Google sea nula, por lo tanto, lo excluye de Google. Así es como se hace la arquitectura. Cerrar sesión en Google, si cierra sesión en su aplicación es un trabajo sucio, pero no puede ayudar si el requisito estipula lo mismo. Por lo tanto, agregue lo siguiente a su función signOut (). Mi proyecto fue una aplicación Angular 6:
document.location.href = " https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://localhost:4200 ";
Aquí localhost: 4200 es la URL de mi aplicación. Si su página de inicio de sesión es xyz.com, introdúzcala.
fuente
este código funcionará para cerrar sesión
<script> function signOut() { var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); auth2.disconnect(); }); auth2.disconnect(); } </script>
fuente
Para cerrar sesión solo en la aplicación, pero no en Gmail:
window.gapi.load('auth2', () => { window.gapi.auth2 .init({ client_id: '<Your client id configired on google console>' }) .then(() => { window.gapi.auth2 .getAuthInstance() .signOut() .then(function() { console.log('User signed out.'); }); }); });
Estoy usando arriba en mi código ReactJs.
fuente
Espero que podamos lograr esto almacenando el token en la sesión al iniciar sesión y acceder al token cuando hizo clic en cerrar sesión.
String _accessToken=(String)session.getAttribute("ACCESS_TOKEN"); if(_accessToken!=null) { StringBuffer path=httpRequest.getRequestURL(); reDirectPage="https://www.google.com/accounts/Logout? continue=https://appengine.google.com/_ah/logout? continue="+path; } response.sendRedirect(reDirectPage);
fuente
Parece que Google recientemente rompió algo con sus cosas de revocación (ha comenzado a devolvernos 400 errores). Ahora tienes que llamar
auth2.disconnect ();
En nuestro caso, tenemos que esperar un par de segundos para que se complete la llamada de desconexión; de lo contrario, el código de inicio de sesión se volverá a autorizar antes de que se complete. Sería bueno si Google devolviera una promesa del método de desconexión.
fuente