109 votes

Comment se déconnecter d'une application où j'ai utilisé OAuth2 pour me connecter avec Google ?

Dans mon application, j'ai implémenté Google signout en utilisant jsapi.

J'ai utilisé l'url https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx pour se connecter à Google, puis https://www.googleapis.com/plus/v1/people/xxxxxx pour obtenir les données de l'utilisateur à partir du profil Google.

J'ai maintenant besoin de déconnecter l'utilisateur de Google en cliquant sur un bouton de mon application. Comment puis-je implémenter cela en JavaScript, ou au moins cela doit demander la page de connexion Google à chaque fois que l'utilisateur se connecte.

J'ai essayé approval_prompt=force mais cela ne semble pas fonctionner.

297voto

jmort253 Points 16929

Aperçu d'OAuth : l'utilisateur est-il celui qu'il prétend être ?

Je ne sais pas si vous avez utilisé OAuth pour vous connecter à Stack Overflow, comme l'option "Connexion avec Google", mais lorsque vous utilisez cette fonctionnalité, Stack Overflow demande simplement à Google s'il sait qui vous êtes :

"Yo Google, ce Vinesh prétend que vinesh.e@gmail.com est lui, est-ce vrai ?"

Si vous êtes déjà connecté, Google vous dira OUI. Dans le cas contraire, Google vous répond :

"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 saisissez votre mot de passe Google, Google indique à Stack Overflow que vous êtes bien celui que vous prétendez être, et Stack Overflow vous connecte.

Quand vous vous déconnectez de votre application, vous vous déconnectez de votre app :

Voici où les développeurs novices en matière d'OAuth s'embrouillent parfois un peu... Google et Stack Overflow, Assembla, l'application web très cool de Vinesh, sont tous des entités différentes, et Google ne sait rien de votre compte sur l'application web cool de Vinesh, et vice versa, à part ce qui est exposé via l'API que vous utilisez pour accéder aux informations du profil.

Lorsque votre utilisateur se déconnecte, il ne se déconnecte pas de Google, il se déconnecte de votre application, ou de Stack Overflow, ou d'Assembla, ou de toute autre application web ayant utilisé Google OAuth pour authentifier l'utilisateur.

En fait, je peux me déconnecter de tous mes comptes Google et rester 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 pas vraiment. Pensez-y de la manière suivante : 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 que la première fois que je me déconnecte de l'un d'entre eux, je doive me reconnecter à mon compte Gmail parce que le développeur de l'application a décidé que, lorsque je me déconnecte de son application, je dois également être déconnecté de Google ? Cela va vite devenir lassant. En résumé, vous Je n'ai vraiment pas envie de faire ça. ...

Oui oui, peu importe, je veux toujours déconnecter l'utilisateur de Google, dites-moi juste comment faire ?

Ceci étant dit, si vous toujours Si vous souhaitez déconnecter un utilisateur de Google et que vous réalisez que vous risquez de perturber son flux de travail, vous pouvez créer dynamiquement l'URL de déconnexion à partir de l'un des boutons de déconnexion des services Google, puis l'invoquer à l'aide d'un élément img ou d'une balise 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 si vous l'invoquez à partir d'un élément qui n'est pas soumis à des restrictions interdomaines, l'utilisateur sera déconnecté de Google.

Notez que cela ne signifie pas nécessairement que l'utilisateur sera déconnecté de l'ordinateur. votre application, seulement Google. :)

Résumé :

Il est important que vous gardiez à l'esprit que, lorsque vous vous déconnectez de votre application, vous n'avez pas besoin de demander à l'utilisateur de saisir à nouveau un mot de passe. C'est là tout l'intérêt ! L'application s'authentifie auprès de Google afin que l'utilisateur n'ait pas à saisir son mot de passe encore et encore dans chaque application Web qu'il utilise. Il faut un peu de temps pour s'y habituer, mais sachez que, tant que l'utilisateur est connecté à Google, votre application n'a pas besoin de se demander si l'utilisateur est bien celui qu'il prétend être.

J'ai la même mise en œuvre que vous dans un projet, en utilisant les informations du profil Google avec OAuth. J'ai essayé la même chose que vous, et cela a 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 :)

27voto

user2055212 Points 98

Vous pouvez vous déconnecter et vous 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";
}

7voto

Vinoj John Hosan Points 160

Pour moi, cela fonctionne (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 dans Android

3voto

Pour se déconnecter de l'application seulement 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 ce qui précède dans mon code ReactJs.

2voto

CamHart Points 115

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X