假设我有以下网站:ClientSiteA.com,ClientSiteB.com,ClientSiteC.com,MainServer.com
我正在向客户端站点分发软件。任何人都可以安装该软件,因此不能将网站视为可信任。 MainServer.com将包含用户信息。
用户将与客户端站点上的软件进行交互。用户可以在任何客户端站点上单击登录链接,这将弹出一个弹出窗口。弹出窗口可以驻留在MainServer.com上。当用户登录任何客户端时,他们将登录所有客户端站点以及MainServer.com。请记住,MainServer.com包含所有用户信息。
我在SAML和OAuth2上做了很多阅读。有人能告诉我什么是可能的吗?如果可能,我应该使用哪些工具/工作流程?如果这是不可能的,有人可以告诉我一些我可以完成的与此相似的事情吗?
仅供参考 - 我正在努力完成像Disqus那样的事情。如果您在任何站点上登录Disqus,您将登录所有站点。
答案 0 :(得分:0)
您可以使用SAML完成此操作,但它会涉及浏览器重定向而不是弹出窗口。
第一次使用命中受保护的站点(ClientA)时,它会重定向到MainServer.com。用户登录后,MainServer会为他们提供一个会话,并使用SAML身份验证语句将其重定向回服务提供商,然后让他们进入。
当用户访问ClientB.com时,它还会重定向到MainServer.com进行身份验证。由于用户已经在MainServer登录,因此可以使用新的身份验证语句将其直接反弹回ClientB.com。用户几乎没有通知。
弹出窗口方法的问题是用户必须将站点A的凭据提供给站点B.如果站点B不是由站点A拥有和控制,则这是一个很大的安全漏洞。用户应该只给出他们对站点的凭据进行身份验证,以防止他们受到攻击。 SAML和其他联合/分布式身份验证机制的设计考虑到了这一点。我不想将我的电子邮件帐户的密钥提供给互联网上的随机网站,但是使用这种方法我可以使用我的Gmail帐户登录stackoverflow。