web-dev-qa-db-ja.com

OAuth2を使用してGoogleでログインしたアプリケーションからログアウトする方法

私のアプリケーションでは、jsapiを使用してGoogleサインアウトを実装しました。

Url https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx を使用してGoogleに接続してから https://www.googleapis.com/ plus/v1/people/xxxxxx は、Googleプロフィールからユーザーデータを取得します。

次に、アプリケーションからボタンをクリックしながら、ユーザーをGoogleからログアウトする必要があります。これをJavaScriptで実装するにはどうすればよいですか、少なくともユーザーがサインインするたびにGoogleログインページに尋ねる必要があります。

approval_Prompt=forceを試しましたが、機能していないようです。

78
Vinesh EG

OAuthの概要:彼/彼女が言っているユーザーは彼/彼女ですか?

「Googleでログイン」オプションのようにOAuthを使用してStack Overflowにログインしたかどうかはわかりませんが、この機能を使用すると、Stack Overflowは単にGoogleに自分が誰かを知っているかどうかを尋ねます:

「Googleよ、このVineshのファラは[email protected]が彼だと主張していますが、本当ですか?」

既にログインしている場合、GoogleはYESと表示します。そうでない場合、Googleは次のように言います。

「ちょっとスタックオーバーフローを待ってください。このエラーを認証します。彼が自分のGoogleアカウントに正しいパスワードを入力できれば、それが彼です」。

Googleのパスワードを入力すると、GoogleはStack Overflowに自分が誰であるかを伝え、Stack Overflowがログインします。

アプリからログアウトすると、yourアプリからログアウトします:

ここでは、OAuthを初めて使用する開発者が少し混乱する場合があります。プロファイル情報にアクセスするために使用しているAPIを介して公開されているものは別として、VineshのクールなWebアプリ、およびその逆。

ユーザーがログアウトするとき、ユーザーはGoogleからログアウトしておらず、アプリ、Stack Overflow、Assembla、またはGoogleを使用しているWebアプリケーションからログアウトしていますOAuthユーザーを認証します。

実際、すべてのGoogleアカウントからログアウトしても、Stack Overflowにログインできます。ユーザーが誰であるかがアプリでわかると、そのユーザーはGoogleからログアウトできます。 Googleはもう必要ありません。

そうは言っても、あなたがやろうとしているのは、本当にあなたに属していないサービスからユーザーをログアウトさせることです。このように考えてみてください。ユーザーとして、Googleアカウントで5つの異なるサービスにログインした場合、私はどの程度イライラすると思いますか。そして、そのうちの1つから初めてログアウトしたとき、Gmailアカウントにログインする必要があります繰り返しますが、そのアプリ開発者は、自分のアプリケーションからログアウトするときに、Googleからもログアウトする必要があると判断したのですか?それは本当に早く老化するでしょう。要するに、あなたは本当にこれをしたくない...

ええ、ええ、何でも、ユーザーをGoogleからログアウトしたいのですが、どうすればいいですか?

そうは言っても、もしあなたがまだdoユーザーをGoogleからログアウトさせ、あなたが彼らのワークフローを非常に混乱させているかもしれないことに気づいたら、動的にGoogleサービスのログアウトボタンの1つからログアウトURLを作成し、img要素またはスクリプトタグを使用してそれを呼び出します。

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

OR

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

OR

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

ユーザーをログアウトページにリダイレクトするか、クロスドメイン制限されていない要素からユーザーを呼び出すと、ユーザーはGoogleからログアウトされます。

これは、必ずしもユーザーがyourアプリケーションからログアウトされることを意味するものではなく、Googleのみです。 :)

概要:

あなたが覚えておくべき重要なことは、アプリからログアウトするときに、ユーザーにパスワードを再入力させる必要がないということです。それが全体のポイントです! Googleに対して認証されるため、ユーザーは使用する各Webアプリケーションで何度も何度もパスワードを入力する必要がありません。慣れるまでには多少時間がかかりますが、ユーザーがGoogleにログインしている限り、アプリはユーザーが本人であるかどうかを心配する必要はありません。

OAuthでGoogleプロフィール情報を使用して、プロジェクトで同じ実装を行っています。私があなたが試みようとしているのと同じことを試みましたが、人々が何度もGoogleにログインしなければならないときに人々を怒らせ始めたので、Googleからログアウトするのを止めました。 :)

214
jmort253

ログアウトしてサイトにリダイレクトできます:

var logout = function() {
    document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}
20
lgabster

私にとっては、動作します(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
}

AndroidのAsyncTaskでこの関数を呼び出す必要があります

4

このコードはサインアウトするように機能します

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

ログアウトボタンを作成してこのリンクを追加すると、アプリからログアウトされ、目的のサイトにリダイレクトされます。

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

あなたのウェブサイトであなたのサイトを切り替えるだけです

1

OuathはGoogleインスタンスをnullにするだけなので、Googleから除外されます。これがアーキテクチャの作成方法です。アプリからログアウトする場合、Googleからログアウトするのは面倒ですが、要件が同じことを規定している場合は役に立ちません。したがって、signOut()関数に次を追加します。私のプロジェクトはAngular 6アプリでした:

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

ここで、localhost:4200は私のアプリのURLです。ログインページがxyz.comの場合、それを入力します。

1
Rahul Sharma

これは、アプリケーションからユーザーをサインアウトするために機能しますが、Googleからはサインアウトしません。

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

ソース: https://developers.google.com/identity/sign-in/web/sign-in

1
CamHart

ログイン中にセッションにトークンを保存し、ログアウトをクリックしたときにトークンにアクセスすることでこれを達成できることを願っています。

    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