我不确定我是否正确理解 SSO。我认为主要的想法是为许多网站只有一个用户名/密码。SSO 的另一个想法是只登录一次,这样您就可以使用具有相同 SSO 机制的所有其他站点而无需再次登录。第一个目标肯定是由 OpenID 实现的。但是第二个呢?如果我使用 facebook 登录 stackoverflow,我将不会自动登录到也使用 facebook 登录的其他网站,对吗?那么,如果您有一个 OpenID,您是否总是需要为每个站点输入您的用户名和密码?
2 回答
你对主要思想是正确的。openID 的优势恰恰在于——能够重用凭证。
基本过程很简单(使用您使用 Facebook 登录 StackOverflow 的示例)。
- 你访问stackoverflow。
- 你说“我是 Facebook 上的 CommanderData”。
- Stackoverflow 说“真的吗?证明它!” - 然后它转到 facebook 并询问“这家伙真的是 Facebook 上的 CommanderData 吗?”
- 如果您已经在 facebook 上登录,facebook 会回复“是的,他实际上是 facebook 上的 CommanderData”,现在 StackOverflow 可以让您登录,知道您就是您在 facebook 上所说的那个人。如果您没有登录 facebook,facebook 应该让您有机会通过登录 facebook 来证明您是 CommanderData,然后它会回复 StackOverflow。
所以回答您的问题:如果您使用 facebook 登录 SO,您将不会自动使用 Facebook OpenId 登录到任何其他网站。但是,如果您已登录 facebook,则不必每次都登录 facebook,因为 facebook 已经知道您是谁,并且可以告诉 RP(依赖方,在您的示例中为 StackOverflow)您是谁。
至于您的评论:我不相信 OpenId 使用跨域 cookie。它发出在双方(EP 和 RP)上都经过验证的单个 Web 请求,然后两者之间不再有通信。StackOverflow 实际上并没有读取您的 facebook 授权 cookie。
您可能会发现此演示文稿内容丰富。
您对 SSO 的理解是正确的。是的,您可以使用 OpenID 实现 SSO,对于 Facebook,您没有使用 OpenID 登录 StackOverflow,它的 OAuth。
使用 OpenID 实现 SSO 的方法不是使用跨域 cookie,而是使用在 OpenID Provider 域中设置的 cookie。因此,每个用户都被 SP 重定向到 OP,OP 看到这个 cookie 并识别出这个用户已经登录并且有一个有效的会话,所以用户将立即被重定向回 RP 而没有任何身份验证挑战。