14

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

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

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

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

我迷路的地方是所涉及的所有先决条件和依赖项。

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

而且,这对我来说真的很重要。

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

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

4

4 回答 4

6

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

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

于 2010-01-27T11:18:30.930 回答
4

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

XRD 和 Yadis:

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

(OpenID(我们通过没有公认的标准机构开发的标准)依赖于 XRD(来自完全不同的标准机构中的另一个正在进行的标准)这一事实可能令人遗憾。我只能说它看起来不错当时的想法。)

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

请参阅 Joseph Smarr 的OpenID 启用您的网站的秘诀。天哪,已经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 标准中的任何内容。

于 2010-01-27T19:31:27.047 回答
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 请求作为响应。检查该请求是否包含有效的登录信息。

于 2010-01-27T21:13:17.593 回答
2

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

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

于 2010-01-27T08:05:52.823 回答