OAuth概述:用户是否是他/她自己?
我不确定你是否使用OAuth登录Stack Overflow,比如“使用Google登录”选项,但当你使用此功能时,Stack Overflow只是询问Google是否知道你是谁:
“嘿Google,这个Vinesh家伙声称vinesh.e@gmail.com是他,这是真的吗?”
如果你已经登录了,Google会回答YES。如果没有,Google会说:
“稍等一下Stack Overflow,我将验证这个人,如果他能输入正确的Google帐户密码,那么就是他。”
当你输入Google密码时,Google会告诉Stack Overflow你是谁,并将你登录。
当你退出应用程序时,你正在退出你的应用程序:
这里是新手开发人员在OAuth上有点困惑的地方... Google、Stack Overflow、Assembla、Vinesh的非常酷的webapp都是不同的实体,Google对于你在Vinesh的酷Web应用程序上的帐户以及反之亦然除了通过API访问配置文件信息所暴露的内容外一无所知。
当你的用户退出时,他或她并没有退出Google,他/她正在退出你的应用程序、Stack Overflow、Assembla或者使用Google OAuth来验证用户的任何Web应用程序。
事实上,我可以退出所有我的Google帐户,仍然登录Stack Overflow。一旦你的应用程序知道用户是谁,那个人就可以退出Google。Google不再需要了。
话虽如此,你要做的是让用户从一个并不属于你的服务中注销。想象一下:作为一个用户,如果我用我的Google帐户登录5个不同的服务,那么第一次我从其中一个注销时,我必须再次登录我的Gmail帐户,因为该应用程序开发人员决定,在我注销他的应用程序时,我也应该注销Google?这会很快变得烦人。简而言之,你真的不想这样做...
好吧,无论如何,我仍然想让用户从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 中注销了。 :)
总之,您需要记住的是,当您注销应用程序时,您不需要让用户重新输入密码。这就是整个目的!它对 Google 进行身份验证,因此用户不必在每个他或她使用的 Web 应用程序中一遍又一遍地输入密码。需要一些适应时间,但要知道,只要用户已登录 Google,您的应用程序就不需要担心用户是否是真正的本人。
我在一个项目中与您一样使用 Google Profile 信息和 OAuth 进行了相同的实现。我尝试了您想要尝试的同样的事情,当他们不得不一次又一次地登录 Google 时,这确实开始让人生气,所以我们停止了让他们从 Google 注销。 :)
clientID
并且是idToken
的一部分,如果Google提供“仅注销此应用程序”的选项,则可以解决这个问题。Google、应用程序开发人员和用户都可以获益!希望Google会听取这个建议。 - Jeb50