Como fazer Logout de uma aplicação onde eu usei o OAuth2 para fazer Login com o Google?

Author: Hakam Fostok, 2012-10-16

8 answers

Visão Geral de OAuth: o Utilizador é quem diz ser?:

Não tenho a certeza se usou o OAuth para se autenticar no Stack Overflow, como a opção "Login with Google", mas quando utiliza esta funcionalidade, o Stack Overflow está simplesmente a perguntar ao Google se ele sabe quem é:

"Yo Google, Este Vinesh afirma que [email protected] é verdade?"
Se já estiver ligado, o Google dirá que sim. Caso contrário, o Google dirá:
"Espera um segundo, vou autenticar este tipo e se ele conseguir introduzir a senha certa para a sua conta do Google, então é ele".

Quando introduz a sua senha do Google, o Google diz ao Stack Overflow que é quem diz ser e ao Stack Overflow regista-o.

Quando sair da sua aplicação, está a sair da sua aplicação :

Aqui é onde os desenvolvedores novos em OAuth às vezes ficam um pouco confusos... Estouro do Google e da pilha, Assemblla, o webapp muito legal do Vinesh, são todas entidades diferentes, e o Google não sabe nada sobre a sua conta no webapp legal do Vinesh, e vice-versa, além do que é exposto através da API que você está usando para acessar informações do perfil.

Quando o seu utilizador sai, ele ou ela não sai do Google, ele/ela sai do seu aplicativo, ou Stack Overflow, ou Assembla, ou qualquer outra aplicação web usada no Google OAuth para autenticar o utilizador.

Na verdade, posso sair. de todas as minhas contas do Google e ainda estar logado em Stack Overflow. Uma vez que o seu aplicativo sabe quem é o Usuário, essa pessoa pode sair do Google. O Google já não é necessário. Dito isto, o que está a pedir para fazer é retirar o utilizador de um serviço que não lhe pertence. Pense nisso assim: como um usuário, quão irritado você acha que eu ficaria se eu conectasse em 5 serviços diferentes com a minha conta Google, então a primeira vez que eu desloquei fora de um deles, eu tenho que login para o meu Conta Gmail novamente porque aquele desenvolvedor de aplicativos decidiu que, quando eu sair de sua aplicação, eu também deveria ser logado fora do Google? Isso vai envelhecer muito depressa. Resumindo, não queres mesmo fazer isto...

Yeh yeh, tanto faz, eu ainda quero registrar o Usuário fora do Google, apenas me diga como faço isso?

Com isso dito, se você ainda quer logar um usuário fora do Google, e perceber que você pode muito bem estar interrompendo seu fluxo de trabalho, você pode criar dinamicamente o url de saída a partir de um dos seus botões de saída dos serviços do Google, e depois invocar isso usando um elemento img ou uma marca 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";

Se você redirecionar seu usuário para a página de logout, ou invocá-lo a partir de um elemento que não é restrito de cross-domain, o Usuário será logado fora do Google.

Lembre-se que isso não significa necessariamente que o Usuário será logado fora de da sua aplicação, apenas do Google. :)

Resumo:

O que é importante para você ter em mente é que, quando você sai do seu aplicativo, você não precisa fazer o Usuário re-digitar uma senha. É esse o objectivo! Autentica-se contra o Google para que o utilizador não tenha de introduzir a sua senha vezes sem conta em cada aplicação web que use. Leva algum tempo se acostumar, mas saiba que, desde que o Usuário esteja logado no Google, seu aplicativo não precisa se preocupar se o usuário está ou não quem diz que é.

Eu tenho a mesma implementação em um projeto que você tem, usando as informações do perfil do Google com OAuth. Eu tentei a mesma coisa que você está olhando para tentar, e isso realmente começou a deixar as pessoas com raiva quando eles tiveram que entrar no Google várias vezes, então nós paramos de registrá-los fora do Google. :)

 189
Author: jmort253, 2012-10-16 07:39:55

Pode sair e redireccionar para o seu 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
Author: lgabster, 2016-09-15 12:59:41
Para mim, 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
}
Tens de ligar para esta função em AsyncTask no android.
 5
Author: Vinoj John Hosan, 2014-06-11 05:25:24

Você pode simplesmente criar um botão de saída e adicionar este link para ele e ele irá automaticamente registrá-lo para fora do aplicativo e irá redirecionar para o seu site desejado:

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

basta alternar o seu site com o seu site

 1
Author: Shivesh Abhishek, 2018-01-12 14:24:27
Espero que possamos conseguir isto guardando o token em sessão enquanto se faz o login e acedendo ao token quando ele clicou no logout.
    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
Author: Janakiram, 2018-01-17 10:03:52

Isto funciona para retirar o Utilizador da aplicação, mas não o Google.

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

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

 0
Author: CamHart, 2018-06-13 20:40:45

Ouath apenas faz a instância do Google nula, daí que você fora do Google. Agora é assim que a arquitetura é feita. Sair do Google, se você sair do seu aplicativo é um trabalho sujo, mas não pode ajudar se o requisito estipula o mesmo. Por isso, adicione o seguinte à sua função signOut (). O meu projecto era um aplicativo Angular 6:

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

Aqui o localhost: 4200 é o URL da minha aplicação. Se a sua página de autenticação for xyz.com então insira isso.

 0
Author: Rahul Sharma, 2018-09-09 17:52:21

Este código vai funcionar para assinar

    <script>
      function signOut() 
      {
        var auth2 = gapi.auth2.getAuthInstance();
        auth2.signOut().then(function () {   
        console.log('User signed out.');   
        auth2.disconnect();   
      }); 
        auth2.disconnect();
      } 
    </script>
 0
Author: Sai Kiran Manthuri, 2018-09-26 06:38:04