出于好奇,当我通过OpenID或类似(Google, Facebook等)登录到像StackOverflow这样的网站时,我也登录到身份提供者本身(例如Google)。
是否有一种方法可以让用户使用第三方身份登录到我的网站,而不需要登录到该身份本身?
我知道谷歌登录的工作方式不同于其他,通过使用谷歌登录。我对所有流行的登录服务(Google, Facebook, Twitter,…)的一般答案很感兴趣,无论它们是基于OpenID (2.0), OAuth还是专有解决方案,例如:"使用OpenID,如果你做某某,它就可以工作。"对谷歌来说,由于技术原因,这是不可能的。"
OpenID/OAuth是一个通用的"协议",允许站点(例如stackoverflow)驻留在身份提供者(例如Google)上进行身份验证。这包括一个事务
- 你告诉stackoverflow你将使用google登录
- stackoverflow将发送给Google以获得重定向url的认证。
- Google将对你进行认证,有效地将你登录到他们的服务中(以便知道你是你)
- Google(和任何其他身份提供商)应该询问您是否希望将您的电子邮件和其他信息发送到stackoverflow
- 如果你同意,谷歌将发送此信息给消费者(stackoverflow)
- 从这一点上,它是由授权消费者(例如stackoverflow)接受此信息(您的电子邮件)为有效。
任何不经过ID提供者登录(步骤3)的方案,将您的凭据暴露给(可能)不受信任的第三方(您希望stackoverflow拥有您的google密码吗?)
步骤3还在您的机器上安装一个cookie,其中包含您与Google的会话。这是由谷歌(或任何ID提供商)考虑这个会话有效的所有其他用途(Gmail等),但它是一个方便的功能无论如何
如果你已经与谷歌建立了会话,它可能不会要求你再次登录。
您所描述的行为是可能的(并且IDP可以很容易地实现它),但由于多种原因而不是理想的。
- 培训用户进行网络钓鱼。因为在点击"登录"后,用户应该输入id和pw,所以很容易显示登录页面,用户将输入他们的信息。
- 当然不方便用户。
- 从风险和pw破解的角度来看,最好在用户登录时做大量的"检查",可能需要额外的检查(如ping电话或询问问题),然后创建一个登录会话。
我理解用户不应该登录IDP作为副作用的愿望,如果您正在编写IDP代码或在用户返回您的站点时提醒用户退出IDP,您可以轻松实现这一点。