如何注销使用 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 注销用户。我如何在 JavaScript 中实现它,或者至少它必须在每次用户登录时询问 Google 登录页面。

我试过 approval_prompt=force ,但似乎没有用。

原文由 Vinesh EG 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

OAuth 概述:用户是他/她所说的那个人吗?:

我不确定您是否使用 OAuth 登录 Stack Overflow,例如“使用 Google 登录”选项,但是当您使用此功能时,Stack Overflow 只是询问 Google 是否知道您是谁:

“哟谷歌,这个 Vinesh 家伙声称 vinesh.e@gmail.com 就是他,这是真的吗?”

如果您已经登录,Google 会说是。如果没有,谷歌会说:

“稍等 Stack Overflow,我会验证这个人的身份,如果他可以输入正确的 Google 帐户密码,那么就是他了”。

当你输入谷歌密码时,谷歌会告诉 Stack Overflow 你是你所说的人,然后 Stack Overflow 会让你登录。

当您注销您的应用程序时,您将退出 您的 应用程序:

刚接触 OAuth 的开发人员有时会在这里感到困惑……Google 和 Stack Overflow、Assembla、Vinesh 的非常酷的 slick-webapp 都是不同的实体,而 Google 对您在 Vinesh 的酷 webapp 上的帐户一无所知,副相反,除了通过您用来访问个人资料信息的 API 公开的内容之外。

当您的用户退出时,他或她并没有退出 Google,他/她正在退出您的应用程序、Stack Overflow、Assembla 或任何使用 Google OAuth 来验证用户身份的 Web 应用程序。

事实上,我可以注销我所有的 Google 帐户并仍然登录到 Stack Overflow。一旦您的应用知道用户是谁,该用户就可以退出 Google。不再需要谷歌。

话虽如此,您要求做的是将用户从真正不属于您的服务中注销。想一想:作为用户,如果我使用我的 Google 帐户登录了 5 个不同的服务,然后我第一次注销其中一个服务时,您认为我会有多恼火,我必须登录我的 Gmail 帐户又是因为那个应用程序开发人员决定,当我退出他的应用程序时,我也应该退出谷歌?那会很快变老的。简而言之,你 真的不想这样做……

是的,无论如何,我仍然想将用户从 Google 中注销,请告诉我该怎么做?

话虽如此,如果您 仍然 想让用户退出 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 进行身份验证,因此用户不必在他或她使用的每个 Web 应用程序中一遍又一遍地输入他或她的密码。这需要一些时间来适应,但要知道,只要用户登录到 Google,您的应用程序就不需要担心用户是否是他/她所说的那个人。

我在一个项目中有与您相同的实现,使用带有 OAuth 的 Google 个人资料信息。我尝试了与您想要尝试的完全相同的事情,当人们不得不一遍又一遍地登录 Google 时,这真的开始让他们生气,所以我们停止让他们退出 Google。 :)

原文由 jamesmortensen 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以注销并重定向到您的站点:

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

原文由 lgabster 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题