Nice programing

Google로 로그인하기 위해 OAuth2를 사용한 애플리케이션에서 로그 아웃하는 방법은 무엇입니까?

nicepro 2020. 10. 8. 18:59
반응형

Google로 로그인하기 위해 OAuth2를 사용한 애플리케이션에서 로그 아웃하는 방법은 무엇입니까?


내 응용 프로그램에서 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했지만 작동하지 않는 것 같습니다.


OAuth 개요 : 사용자가 누구라고 말하는가? :

"Google로 로그인"옵션과 같이 OAuth를 사용하여 Stack Overflow에 로그인했는지 확실하지 않지만이 기능을 사용할 때 Stack Overflow는 단순히 Google에 귀하가 누구인지 알고 있는지 묻는 것입니다.

"Yo Google, Vinesh 친구가 vinesh.e@gmail.com이 자신이라고 주장합니다. 사실인가요?"

이미 로그인되어있는 경우 Google에서 YES라고 말합니다. 그렇지 않은 경우 Google은 다음과 같이 말합니다.

"잠시만 기다려주세요.이 친구를 인증하겠습니다. Google 계정에 올바른 비밀번호를 입력 할 수 있다면 바로 그 사람입니다."

Google 비밀번호를 입력하면 Google은 사용자가 누구인지를 Stack Overflow에 알리고 Stack Overflow가 로그인합니다.

앱에서 로그 아웃하면 로그 아웃하고 당신의 응용 프로그램 :

여기에서 OAuth를 처음 사용하는 개발자가 때때로 약간 혼란스러워하는 경우가 있습니다. Google과 Stack Overflow, Assembla, Vinesh's-very-cool-slick-webapp은 모두 다른 엔티티이며 Google은 Vinesh의 멋진 웹앱에서 귀하의 계정에 대해 아무것도 모릅니다. 프로필 정보에 액세스하는 데 사용하는 API를 통해 노출되는 것 외에는 마찬가지입니다.

사용자가 로그 아웃하면 사용자는 Google에서 로그 아웃하지 않고 앱, Stack Overflow, Assembla 또는 Google OAuth를 사용하여 사용자를 인증하는 모든 웹 애플리케이션에서 로그 아웃합니다.

실제로 모든 Google 계정에서 로그 아웃해도 여전히 Stack Overflow에 로그인되어 있습니다. 앱에서 사용자가 누구인지 알게되면 해당 사용자는 Google에서 로그 아웃 할 수 있습니다. Google은 더 이상 필요하지 않습니다.

즉, 실제로 귀하에게 속하지 않는 서비스에서 사용자를 로그 아웃하는 것입니다. 다음과 같이 생각해보십시오. 사용자로서 Google 계정으로 5 개의 다른 서비스에 로그인 한 다음 그중 하나에서 처음 로그 아웃하면 Gmail 계정에 로그인해야합니다. 앱 개발자가 애플리케이션에서 로그 아웃하면 Google에서도 로그 아웃해야한다고 결정했기 때문입니다. 그것은 정말 빨리 늙어 갈 것입니다. 요컨대, 당신은 정말로 이것을하고 싶지 않습니다 ...

Yeh yeh, 어쨌든, 여전히 사용자를 Google에서 로그 아웃시키고 싶습니다. 어떻게해야하는지 알려주세요.

당신이 경우 말했다, 함께 아직도 구글의 아웃 사용자가 로그, 당신은 아주 잘 그들의 작업 흐름을 방해 할 수 있다는 것을 인식 할, 당신은 동적으로 Google 서비스 중 하나에서 로그 아웃 URL을 만들 수 버튼을 로그 아웃 한 후 사용하여 호출 있음 img 요소 또는 스크립트 태그 :

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

또는

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

또는

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

사용자를 로그 아웃 페이지로 리디렉션하거나 도메인 간 제한되지 않은 요소에서 호출하면 사용자는 Google에서 로그 아웃됩니다.

이것은 반드시 사용자가 귀하의 애플리케이션에서 로그 아웃된다는 의미는 아니며 Google 만 해당됩니다. :)

요약:

기억해야 할 중요한 점은 앱에서 로그 아웃 할 때 사용자가 암호를 다시 입력하도록 할 필요가 없다는 것입니다. 그게 요점입니다! Google에 대해 인증하므로 사용자가 사용하는 각 웹 애플리케이션에 비밀번호를 반복해서 입력 할 필요가 없습니다. 익숙해지는 데는 약간의 시간이 걸리지 만 사용자가 Google에 로그인되어있는 한 앱은 사용자가 자신이 말하는 사람인지 아닌지에 대해 걱정할 필요가 없습니다.

OAuth와 함께 Google 프로필 정보를 사용하여 프로젝트에 동일한 구현이 있습니다. 나는 당신이 시도하는 것과 똑같은 것을 시도했고, 사람들이 구글에 계속해서 로그인해야했을 때 정말 화를 내기 시작했고, 그래서 우리는 그들을 구글에서 로그 아웃하는 것을 중단했습니다. :)


로그 아웃하고 사이트에 다시 접속할 수 있습니다.

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

나를 위해 작동합니다 (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
}

안드로이드의 AsyncTask에서이 함수를 호출해야합니다.


로그 아웃 버튼을 생성하고 여기에이 링크를 추가하면 앱에서 자동으로 로그 아웃되고 원하는 사이트로 리디렉션됩니다.

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

귀하의 웹 사이트로 귀하의 사이트를 전환하십시오.


이는 사용자가 애플리케이션에서 로그 아웃되지만 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


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:4200";

Here localhost:4200 is the URL of my app. If your login page is xyz.com then input that.


this code will work to sign out

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

I hope we can achieve this by storing the token in session while logging in and access the token when he clicked on 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);

It looks like Google recently broke something with their revoke stuff (it's started returning 400 errors for us). You now have to call

auth2.disconnect();

In our case we then have to wait a couple of seconds for the disconnect call to complete otherwise the sign-in code will re-authorise before it's done. It'd be good if google returned a promise from the disconnect method.

참고URL : https://stackoverflow.com/questions/12909332/how-to-logout-of-an-application-where-i-used-oauth2-to-login-with-google

반응형