0

我不确定我是否正确理解 SSO。我认为主要的想法是为许多网站只有一个用户名/密码。SSO 的另一个想法是只登录一次,这样您就可以使用具有相同 SSO 机制的所有其他站点而无需再次登录。第一个目标肯定是由 OpenID 实现的。但是第二个呢?如果我使用 facebook 登录 stackoverflow,我将不会自动登录到也使用 facebook 登录的其他网站,对吗?那么,如果您有一个 OpenID,您是否总是需要为每个站点输入您的用户名和密码?

4

2 回答 2

0

你对主要思想是正确的。openID 的优势恰恰在于——能够重用凭证。

基本过程很简单(使用您使用 Facebook 登录 StackOverflow 的示例)。

  1. 你访问stackoverflow。
  2. 你说“我是 Facebook 上的 CommanderData”。
  3. Stackoverflow 说“真的吗?证明它!” - 然后它转到 facebook 并询问“这家伙真的是 Facebook 上的 CommanderData 吗?”
  4. 如果您已经在 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。

您可能会发现此演示文稿内容丰富。

于 2012-09-28T18:08:51.137 回答
0

您对 SSO 的理解是正确的。是的,您可以使用 OpenID 实现 SSO,对于 Facebook,您没有使用 OpenID 登录 StackOverflow,它的 OAuth。

使用 OpenID 实现 SSO 的方法不是使用跨域 cookie,而是使用在 OpenID Provider 域中设置的 cookie。因此,每个用户都被 SP 重定向到 OP,OP 看到这个 cookie 并识别出这个用户已经登录并且有一个有效的会话,所以用户将立即被重定向回 RP 而没有任何身份验证挑战。

于 2012-10-02T11:30:49.760 回答