Présentation d'OAuth: l'utilisateur est-il celui qu'il dit être?:
Je ne sais pas si vous avez utilisé OAuth pour vous connecter à Stack Overflow, comme l'option "Se connecter avec Google", mais lorsque vous utilisez cette fonctionnalité, Stack Overflow demande simplement à Google s'il sait qui vous êtes:
"Yo Google, ce type de Vinesh prétend que [email protected] est lui, est-ce vrai?"
Si vous êtes déjà connecté, Google dira OUI. Sinon, Google dira:
"Attendez une seconde Stack Overflow, je vais authentifier ce type et s'il peut entrer le bon mot de passe pour son compte Google, alors c'est lui".
Lorsque vous entrez votre mot de passe Google, Google indique à Stack Overflow que vous êtes qui vous prétendez être et Stack Overflow vous connecte.
Lorsque vous vous déconnectez de votre application, vous vous déconnectez de votre application:
Voici où les développeurs novices dans OAuth sont parfois un peu confus ... Google et Stack Overflow, Assembla, Vinesh's-very-cool-slick-webapp, sont toutes des entités différentes, et Google ne sait rien de votre compte sur l'application Web cool de Vinesh, et vice versa, mis à part ce qui est exposé via l'API que vous utilisez pour accéder aux informations de profil.
Lorsque votre utilisateur se déconnecte, il ne se déconnecte pas de Google, il se déconnecte de votre application, de Stack Overflow, d'Assembla ou de toute autre application Web qui a utilisé Google OAuth pour authentifier l'utilisateur.
En fait, je peux me déconnecter de tous mes comptes Google tout en restant connecté à Stack Overflow. Une fois que votre application sait qui est l'utilisateur, cette personne peut se déconnecter de Google. Google n'est plus nécessaire.
Cela dit, ce que vous demandez, c'est de déconnecter l'utilisateur d'un service qui ne vous appartient vraiment pas. Pensez-y comme ceci: en tant qu'utilisateur, à quel point pensez-vous que je serais ennuyé si je me connectais à 5 services différents avec mon compte Google, puis la première fois que je me suis déconnecté de l'un d'entre eux, je dois me connecter à mon compte Gmail encore une fois parce que le développeur de l'application a décidé que, lorsque je me déconnecterais de son application, je devais également être déconnecté de Google? Cela va vieillir très vite. En bref, vous ne voulez vraiment pas faire ça ...
Ouais, peu importe, je veux toujours déconnecter l'utilisateur de Google, dis-moi simplement comment faire?
Cela dit, si vous souhaitez toujours déconnecter un utilisateur de Google et que vous réalisez que vous risquez très bien de perturber son flux de travail, vous pouvez créer dynamiquement l'URL de déconnexion à partir de l'un de leurs boutons de déconnexion des services Google, puis l'invoquer en utilisant un élément img ou une balise de script:
<script type="text/javascript"
src="https://mail.google.com/mail/u/0/?logout&hl=en" />
OU
<img src="https://mail.google.com/mail/u/0/?logout&hl=en" />
OU
window.location = "https://mail.google.com/mail/u/0/?logout&hl=en";
Si vous redirigez votre utilisateur vers la page de déconnexion ou que vous l'invoquez à partir d'un élément qui n'est pas restreint à plusieurs domaines, l'utilisateur sera déconnecté de Google.
Notez que cela ne signifie pas nécessairement que l'utilisateur sera déconnecté de votre application, uniquement Google. :)
Sommaire:
Il est important que vous gardiez à l'esprit que, lorsque vous vous déconnectez de votre application, vous n'avez pas besoin de forcer l'utilisateur à saisir à nouveau un mot de passe. Exactement! Il s'authentifie auprès de Google afin que l'utilisateur n'ait pas à saisir son mot de passe encore et encore et encore dans chaque application Web qu'il utilise. Il faut un certain temps pour s'y habituer, mais sachez que, tant que l'utilisateur est connecté à Google, votre application n'a pas à se soucier de savoir si l'utilisateur est ou non celui qu'il dit être.
J'ai la même implémentation dans un projet que vous, en utilisant les informations de profil Google avec OAuth. J'ai essayé la même chose que vous cherchez à essayer, et cela a vraiment commencé à mettre les gens en colère lorsqu'ils devaient se connecter à Google encore et encore, alors nous avons arrêté de les déconnecter de Google. :)
Vous pouvez vous déconnecter et rediriger vers votre site:
var logout = function() { document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com"; }
la source
Pour moi, ça marche (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 }
Vous devez appeler cette fonction dans AsyncTask sous Android
la source
Vous pouvez simplement créer un bouton de déconnexion et y ajouter ce lien.Il vous déconnectera finalement de l'application et vous redirigera vers le site souhaité:
https://appengine.google.com/_ah/logout?continue=http://www.YOURSITE.com
il suffit de basculer VOTRE SITE avec votre site Web
la source
Cela fonctionne pour déconnecter l'utilisateur de l'application, mais pas Google.
var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); });
Source: https://developers.google.com/identity/sign-in/web/sign-in
la source
AuthInstance
que vous avez utilisé. Votre source elle-même dit ... " Vous pouvez permettre aux utilisateurs de se déconnecter de votre application sans se déconnecter de Google ... "Ouath rend simplement l'instance Google nulle, donc vous sortez de Google. Voilà comment l'architecture est faite. Se déconnecter de Google, si vous vous déconnectez de votre application est un sale boulot, mais ne peut pas vous empêcher si l'exigence le stipule. Ajoutez donc ce qui suit à votre fonction signOut (). Mon projet était une application Angular 6:
document.location.href = " https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://localhost:4200 ";
Ici localhost: 4200 est l'URL de mon application. Si votre page de connexion est xyz.com, saisissez-la.
la source
ce code fonctionnera pour vous déconnecter
<script> function signOut() { var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); auth2.disconnect(); }); auth2.disconnect(); } </script>
la source
Pour vous déconnecter de l'application uniquement mais pas de 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.'); }); }); });
J'utilise ci-dessus dans mon code ReactJs.
la source
J'espère que nous pouvons y parvenir en stockant le jeton en session lors de la connexion et en accédant au jeton lorsqu'il a cliqué sur la déconnexion.
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);
la source
Il semble que Google a récemment cassé quelque chose avec ses éléments de révocation (il a commencé à renvoyer 400 erreurs pour nous). Vous devez maintenant appeler
auth2.disconnect ();
Dans notre cas, nous devons ensuite attendre quelques secondes pour que l'appel de déconnexion se termine, sinon le code de connexion sera réautorisé avant la fin. Ce serait bien si Google retournait une promesse de la méthode de déconnexion.
la source