it-swarm.com.de

Abmelden einer Anwendung Wo habe ich OAuth2 verwendet, um sich bei Google anzumelden?

In meiner Anwendung habe ich Google-Abmeldung mit jsapi implementiert.

Ich verwendete die URL https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx , um eine Verbindung zu Google herzustellen und dann https://www.googleapis.com/plus/v1/people/xxxxxx , um Benutzerdaten aus dem Google-Profil abzurufen.

Jetzt muss ich den Nutzer von Google abmelden, während ich in meiner Anwendung auf eine Schaltfläche klicke. Wie kann ich dies in JavaScript implementieren, oder es muss mindestens die Google-Anmeldeseite bei jeder Anmeldung des Nutzers abfragen.

Ich habe approval_Prompt=force ausprobiert, scheint aber nicht zu funktionieren.

74
Vinesh EG

Überblick über OAuth: Ist der Benutzer, von dem er sagt, dass er/sie ist ?:

Ich bin nicht sicher, ob Sie sich mit OAuth bei Stack Overflow angemeldet haben, beispielsweise mit der Option "Mit Google anmelden". Wenn Sie diese Funktion verwenden, fragt Stack Overflow lediglich, ob Google weiß, wer Sie sind:

"Yo Google, dieser Vinesh-Kerl behauptet, er sei [email protected], stimmt das?"

Wenn Sie bereits angemeldet sind, sagt Google JA. Wenn nicht, sagt Google:

"Einen Moment nach dem Stack-Überlauf hängen lassen, ich authentifiziere diesen Kerl und wenn er das richtige Passwort für sein Google-Konto eingeben kann, dann ist er es".

Wenn Sie Ihr Google-Passwort eingeben, teilt Google Stack Overflow mit, dass Sie derjenige sind, von dem Sie sagen, dass Sie ihn sind, und Stack Overflow meldet Sie an.

Wenn Sie sich von Ihrer App abmelden, melden Sie sich von Ihrer-App ab:

Hier werden Entwickler, die mit OAuth neu sind, manchmal etwas verwirrt ... Google und Stack Overflow, Assembla, Vinesh-cool-slick-webapp sind allesamt verschiedene Entitäten, und Google weiß nichts über Ihr Konto bei Vinesh's cooler Webapp, und umgekehrt Umgekehrt, abgesehen von den Informationen, die über die API verfügbar gemacht werden, verwenden Sie den Zugriff auf Profilinformationen. 

Wenn sich Ihr Nutzer abmeldet, loggt er sich nicht bei Google aus, er meldet sich bei Ihrer App oder bei Stack Overflow oder Assembla oder einer anderen Webanwendung ab, die Google OAuth verwendet, um den Nutzer zu authentifizieren.

Tatsächlich kann ich mich von allen meinen Google-Konten abmelden und trotzdem bei Stack Overflow angemeldet sein. Sobald Ihre App weiß, wer der Nutzer ist, kann sich diese Person bei Google abmelden. Google wird nicht mehr benötigt.

Nachdem dies gesagt wurde, müssen Sie den Benutzer von einem Dienst abmelden, der Ihnen wirklich nicht gehört. Stellen Sie sich das so vor: Wie ärgerlich finde ich mich als Nutzer, wenn ich mich mit meinem Google-Konto bei 5 verschiedenen Diensten anmeldete. Wenn ich mich zum ersten Mal bei einem dieser Dienste abgemeldet habe, muss ich mich bei meinem Google Mail-Konto anmelden Wieder einmal, weil der App-Entwickler entschieden hat, dass ich, wenn ich mich von seiner Anwendung abmelde, auch von Google abgemeldet werden sollte? Das wird sehr schnell alt. Kurz gesagt, Sie wollen das wirklich nicht} ...

Ja, wie auch immer, ich möchte den Nutzer immer noch bei Google abmelden. Sag mir einfach, wie ich das mache?

Wenn Sie noch immer einen Benutzer von Google abmelden möchten und feststellen, dass Sie möglicherweise den Workflow unterbrechen, können Sie die Abmelde-URL über eine der Google-Services-Schaltfläche zum Abmelden dynamisch erstellen und rufen Sie dann mit einem img-Element oder einem Skripttag auf:

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

ODER 

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

ODER 

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

Wenn Sie Ihren Nutzer zur Abmeldeseite umleiten oder ihn von einem Element aus aufrufen, das nicht domänenübergreifend eingeschränkt ist, wird der Nutzer von Google abgemeldet.

Beachten Sie, dass dies nicht unbedingt bedeutet, dass der Benutzer von der Anwendung Ihrer, nur von Google, abgemeldet wird. :)

Zusammenfassung:

Wichtig ist dabei, dass Sie beim Abmelden Ihrer App nicht erneut ein Kennwort eingeben müssen. Das ist der springende Punkt! Es authentifiziert sich bei Google, sodass der Benutzer sein Kennwort nicht immer und immer wieder in jede von ihm verwendete Webanwendung eingeben muss. Es ist etwas gewöhnungsbedürftig, aber wissen Sie, dass sich Ihre App, solange der Nutzer bei Google angemeldet ist, nicht darum kümmern muss, ob der Nutzer derjenige ist, von dem er sagt, dass er/sie ist. 

Ich habe die gleiche Implementierung in einem Projekt wie Sie, wenn Sie die Google-Profilinformationen mit OAuth verwenden. Ich habe genau das Gleiche versucht, das Sie ausprobieren möchten, und es begann wirklich wütend zu werden, als sie sich immer wieder bei Google anmelden mussten. Daher haben wir sie nicht mehr von Google abgemeldet. :)

199
jmort253

Sie können sich abmelden und zu Ihrer Site umleiten:

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

Für mich funktioniert es (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
}

Sie müssen diese Funktion in AsyncTask in Android aufrufen

5

dieser Code funktioniert zum Abmelden 

    <script>
      function signOut() 
      {
        var auth2 = gapi.auth2.getAuthInstance();
        auth2.signOut().then(function () {   
        console.log('User signed out.');   
        auth2.disconnect();   
      }); 
        auth2.disconnect();
      } 
    </script>
1

Sie können einfach eine Schaltfläche zum Abmelden erstellen und diesen Link hinzufügen. Sie werden dann von der App abgemeldet und zur gewünschten Site umgeleitet:

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

nur deine Website mit deiner Website umschalten

1

Ich hoffe, dass wir dies erreichen können, indem Sie das Token während der Anmeldung in der Sitzung speichern und auf das Token zugreifen, wenn Sie auf Abmeldung klicken.

    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 macht nur die Google-Instanz zu null, daher haben Sie Google verlassen. So wird die Architektur gemacht. Wenn Sie sich von Google abmelden, ist das Abmelden von Ihrer Anwendung eine schmutzige Arbeit, kann jedoch nicht helfen, wenn die Anforderung dies verlangt. Fügen Sie der signOut () - Funktion daher Folgendes hinzu. Mein Projekt war eine Angular 6 App:

document.location.href = " https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://localhost:4200 ";

Hier localhost: 4200 ist die URL meiner App. Wenn Ihre Anmeldeseite xyz.com ist, geben Sie diese ein.

0
Rahul Sharma

Dies funktioniert, um den Benutzer von der Anwendung abzumelden, aber nicht von Google.

var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
  console.log('User signed out.');
});

Quelle: https://developers.google.com/identity/sign-in/web/sign-in

0
CamHart