web-dev-qa-db-fra.com

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

Dans mon application, j'ai implémenté Google Signout à l'aide de jsapi.

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

Maintenant, je dois déconnecter l'utilisateur de Google en cliquant sur un bouton de mon application. Comment puis-je implémenter cela en JavaScript, ou du moins, il faut demander à la page de connexion de Google chaque fois que l'utilisateur se connecte.

J'ai essayé approval_Prompt=force, mais semble ne pas fonctionner.

74
Vinesh EG

Présentation d'OAuth: l'utilisateur est-il qui il/elle dit qu'il/elle est ?:

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 gars de Vinesh affirme que [email protected] est lui, est-ce vrai?"

Si vous êtes déjà connecté, Google dira OUI. Sinon, Google dira:

"Attends une seconde, je vais authentifier ce gars et s'il peut saisir le bon mot de passe pour son compte Google, c'est lui".

Lorsque vous entrez votre mot de passe Google, Google indique ensuite à Stack Overflow que vous êtes qui vous dites être et Stack Overflow vous connecte.

Lorsque vous vous déconnectez de votre application, vous vous déconnectez de votre application:

C'est là que les développeurs débutants avec OAuth sont parfois un peu confus ... Google et Stack Overflow, Assembla, la Webapp de Vinesh, sont vraiment très cool, et Google ne sait rien de votre compte sur la Webapp cool de Vinesh. inversement, 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 ou d'Assembla, ou de toute application Web ayant 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, vous demandez de déconnecter l'utilisateur d'un service qui ne vous appartient pas vraiment. Pensez-y comme ceci: en tant qu'utilisateur, quel ennui pensez-vous que je serais si je me connectais à 5 services différents avec mon compte Google, puis la première fois que je me déconnectais de l'un d'entre eux, je devais me connecter à mon compte Gmail encore une fois parce que le développeur de cette application a décidé que, lorsque je me déconnecte de son application, je devrais également être déconnecté de Google? Ça va vieillir très vite. En bref, vous ne voulez vraiment pas faire cela ...

Yeh yeh, peu importe, je veux toujours déconnecter l'utilisateur de Google, dites-moi simplement comment je fais cela?

Cela dit, si vous voulez toujours déconnecter un utilisateur de Google et vous rendre compte que vous risquez de perturber son flux de travail, vous pouvez créer de manière dynamique l'URL de déconnexion à partir de l'un de ses boutons de déconnexion de services Google, et invoquez ensuite cela en utilisant un élément img ou 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 l'invoquez à partir d'un élément non soumis à une restriction interdomaine, 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 de Google. :)

Résumé:

Il est important de garder à l'esprit que, lorsque vous vous déconnectez de votre application, vous n'avez pas besoin de demander à l'utilisateur de ressaisir un mot de passe. Exactement! Il s'authentifie auprès de Google pour que l'utilisateur n'ait pas à entrer son mot de passe 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 à s'inquiéter 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 essayez d'essayer et cela a vraiment commencé à mettre les gens en colère lorsqu'ils devaient se connecter à Google encore et encore. Nous avons donc arrêté de les déconnecter de Google. :)

199
jmort253

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";
}
19
lgabster

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

5
Vinoj John Hosan

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>
1
Sai Kiran Manthuri

Vous pouvez simplement créer un bouton de déconnexion et y ajouter ce lien. Il vous déconnectera automatiquement de l'application et vous redirigera vers votre site souhaité:

https://appengine.google.com/_ah/logout?continue=http://www.YOURSITE.com

il suffit de basculer YOURSITE avec votre site web

1
Shivesh Abhishek

J'espère que nous pourrons y parvenir en stockant le jeton en session lors de la connexion et en accédant au jeton lorsqu'il cliquera sur sa 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);
0
Janakiram

Ouath rend l'instance de Google nulle, d'où le départ de Google. Voilà comment l'architecture est faite. Se déconnecter de Google, si vous vous déconnectez de votre application est un travail fastidieux, mais ne peut vous aider si les conditions requises sont les mêmes. Par conséquent, ajoutez ce qui suit à votre fonction signOut (). Mon projet était une application Angular 6:

document.location.href = " http://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.

0
Rahul Sharma

Cela permet de déconnecter l'utilisateur de l'application, mais pas de 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

0
CamHart