【问题标题】:Is OpenID too complicated? [closed]OpenID 是不是太复杂了? [关闭]
【发布时间】:2010-01-27 07:50:08
【问题描述】:

我开始严重怀疑 OpenID 社区,尽管它确实有效。

我目前正在评估 OpenID 作为“此”站点的身份验证服务,虽然承诺很好,但我无法让它发挥作用。我真的迷路了。

我请求 SO 社区帮助我。给我答案并向我展示示例,以便我可以按照预期的方式利用它。

我的场景很典型。我想通过特定的 Google Apps 域对用户进行身份验证。如果您有权访问此 Google Apps 域,那么您就可以访问我的网络应用程序。

我迷失的是所有的先决条件和依赖关系。

  1. 什么是 XRD?
  2. 什么是 Yadis?
  3. 为什么需要 XRD 和 Yadis?
  4. 我需要做什么才能在我的网站上部署 OpenID 身份验证?

另外,这对我来说真的很重要。

当我登录 SO 时,我使用的是我的 Google 帐户。当我单击登录按钮时,我会看到此确认页面。我授予 SO 使用我的 Google 帐户凭据的权利。

不知何故,Google 知道是“Stackoverflow.com”在询问我是否可以登录。我想知道我对这个小文本有什么控制方式。我打算在几个不同的域上部署 OpenID,但我希望它们都可以工作,而不必单独配置特殊参数,例如秘密 API 密钥等等。但是,我不确定这是 OpenID 的先决条件,还是 Google 提供的联合登录 API。

【问题讨论】:

  • 我也遇到过这个问题。 OpenID PHP 库希望使用带有使用 JavaScript 自动提交的表单的空白页面,但我选择使用 HTTP 标头重定向,但 Google 的 OpenID 不会返回任何有用的数据。
  • 不知道这是否与您的问题有关,但我不确定您是否可以使用带有 OpenID 的 Google Apps 域帐户。我有两个 Google Apps 帐户和一个“普通”Google 帐户,只有最后一个适用于 OpenID 身份验证。如果有人知道如何成功使用域应用程序帐户作为 OpenID,请告知。 :)
  • @calmh - 我发现了一些非常有说服力的文档,您可以使用 OpenID 或 OAuth 对 Google Apps 域进行身份验证,只要您为高级服务付费。但令人惊讶的是,我还没有找到有关如何操作的示例。
  • 啊。 “高级”部分可能是我一直缺少的。

标签: .net openid google-apps


【解决方案1】:

要真正回答您的问题(即忽略所有争论点),我就像我们所说的那样,使用DotNetOpenAuth 为我的一个网站实施 OpenID 授权;这很简单。

它只是一个 .NET 控件,您将其删除,配置少量的东西,然后让它链接到 Forms 身份验证。很不错。

【讨论】:

  • 我对这个库很熟悉,我自己也用过,它很漂亮。但是,您是否尝试过使用 Google Apps for SSO(单点登录)的 OAuth?
【解决方案2】:

好的,你在一个标题下有很多问题。让我看看我能不能把它分解。

XRD 和 Yadis:

“Yadis”是 OpenID 的服务发现块的名称 - 让您从“我的 OpenID 是 example.com”到“我的 OpenID 的权威服务器位于 openid.example.com/server 和它支持带有 AX 扩展的 v2。” XRDS 是保存该信息的 XML 模式。

(事实上,OpenID(我们通过没有公认的标准机构开发的标准)依赖于 XRD(来自 an entirely different standards body 中的另一个正在进行的标准)可能令人遗憾。我只能说它看起来像一个当时是个好主意。)

“我需要做什么来部署?”

请参阅 Joseph Smarr 的 A Recipe for OpenID-Enabling Your Site。天哪,已经2岁多了?然而,它仍然是相关的。

OpenID 提供商如何识别您的网站(依赖方):

那个小文本(例如“stackoverflow.com”)是 OpenID“领域”,它是您传递给提供者的参数,是您用来处理其响应的端点 URL 的严格子集。 (因此,如果您告诉服务器将 OpenID 响应发送到 server2.example.com/foobar,那么您的领域可以是 example.com、server2.example.com 或 server2.example.com/foobar,但不是 server99.example .com.)

秘密 API 密钥:

一般来说,不需要获取带外 API 密钥。对于通用 OpenID 提供者,密钥只是通过标准 OpenID 关联机制发布。

现在您已经发现了 OpenID 提供商可能认为有价值的一些功能,例如“我如何以更用户友好的方式告诉用户他们正在登录哪个站点,而不是向他们显示 URL摘录”或“我如何才能确定此请求是否真的来自与我有某种合同关系的 RP”,但这些功能不是 OpenID 2.0 标准中的任何内容。

【讨论】:

  • 内容丰富,但它仍然不简单或没有足够的细节让我明白。 OpenID 对我来说仍然是个谜……为什么当它实际上是消费者时你称它为提供者,当它看起来像一个端点时你为什么说它是 OpenID 标识符?我已经在很多层面上感到困惑了。
  • 你对我上面特别写的东西感到困惑吗?关于术语,你读过openid.net/specs/openid-authentication-2_0.html#terminology 的术语部分吗?
  • 我承认我没有阅读规范。关于术语的部分很有帮助,但单词的选择?我对术语有疑问。只是我不应该转向规范来了解如何部署 OpenID,不是我介意技术部分,而是它不熟悉并且在纸上有些奇怪。必须对它在某种抽象级别上的工作方式进行讨论,但没有提及它在实践中是如何工作的。我现在开始自己弄清楚一些事情。不过,我确实感谢所有帮助,我希望这是不言而喻的。
  • OpenId 的规范太复杂了。
【解决方案3】:

我实际上已经找到了解决问题的方法,而且出乎意料的是,它非常简单。我仍然不了解 XRDS 和 Yadis,但我很容易像这样利用它。

您想要的以及您正在寻找的是用于执行 OpenID“中继方”的代码。这就是作为 OpenID 提供者的消费者的“你”。您输入一个 OpenID 端点,瞧,您已经启用了您的站点的 OpenID,此代码在实践中说明了这一点。

// using DotNetOpenAuth
var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response == null)
{
    // Google account end point (works fine)
    var googleID = "https://www.google.com/accounts/o8/id";
    // Google hosted account end point
    //  https://www.google.com/accounts/o8/site-xrds?hd=mydomain.com
    // I was unable to test this, but I was running my RP (this code)
    // from localhost and it's quite possible that a hosted account RP
    // has to return to the same domain.
    // It went fine, but crashed with a "Unable to resolve mydomain.com" error
    // once I logged in.
    openid.CreateRequest(googleID).RedirectToProvider();
}
else
{
    switch (response.Status)
    {
        case AuthenticationStatus.Authenticated:
            // Success
            // to allow persistance across sessions
            // you'll have to track the "claimed identifier"
            // some OpenID providers allow you to get an email address through
            // extensions but this is not always possible.
            // the claimed identifier is typically your safest bet
            // and it's a big URL which uniquely identifies the guest
            // as a specific user, however, you know very little about this user
            // which is a good thing becuase you don't have to give out personal or
            // sensitive information to start using a service.
            break;

        default:
            // Something went wrong, check Status property
            break;
    }
}

当我弄清楚这一点时,我从每个规格中都得到了印象。在那里,我应该托管自己的“OpenID 提供程序”,这听起来像是我应该处理帐户或流程的某些部分。实际上,我所要做的就是这个。

请求该 URL,或者如果您收到 OpenID 请求作为响应。检查该请求是否包含有效的登录信息。

【讨论】:

    【解决方案4】:

    听起来您真的很想调查RPX - 这是一个让开发人员(和用户)可以轻松使用他们喜欢的身份验证机制(包括 OpenID)的解决方案。

    作为第三方身份提供商和您的网站之间的代理,RPX 可帮助您使用他们在 Facebook、Google、Yahoo!、Twitter、MySpace、AOL、Windows Live/MSN/Hotmail 或任何其他网站上的现有帐户轻松地对用户进行身份验证OpenID 提供者。

    【讨论】:

    • 即使认为 RPX 可能非常有用,如果没有各方,我真的更喜欢它,除了我和 google 参与身份验证。可能没问题,但我不想要第三方依赖。
    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多