2010-01-27 59 views
14

尽管事实证明它起作用,但我开始严重怀疑OpenID社区。OpenID太复杂了吗?

我目前正在评估OpenID作为'this'网站的身份验证服务,虽然承诺非常好,但我却无法让它工作。我真的迷失了。

我想请SO社区来帮助我。给我答案,并给我示例,以便我可以按照它的意图来利用这个。

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

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

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

此外,这对我来说非常重要。

当我登录到SO时,我使用我的Google帐户。当我点击登录按钮时,我会看到这个确认页面。我在哪里授予使用我的Google帐户凭据的权利。

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

+0

我也一直有这个问题。 OpenID PHP库希望使用带有使用JavaScript自动提交的表单的空白页面,但我选择使用HTTP标头重定向,但Google的OpenID不会返回任何有用的数据。 – amphetamachine 2010-01-27 07:54:00

+1

不知道这是否与您的问题相关,但我不确定您是否可以在OpenID中使用Google Apps域帐户。我有两个Google Apps帐户和一个“普通”Google帐户,只有最后一个适用于OpenID身份验证。 如果有人知道如何成功使用Apps for domains帐户作为OpenID,请告诉。 :) – 2010-01-27 09:42:57

+1

@calmh - 我发现一些非常有说服力的文档,您可以使用OpenID或OAuth对Google Apps域进行身份验证,只要您支付高级服务即可。但令人惊讶的是,我还没有找到如何做到这一点的样本。 – 2010-01-27 10:08:17

回答

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的请求。检查该请求是否包含有效的登录信息。

2

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

工作作为第三方身份提供者和网站之间的代理,RPX可帮助您轻松与他们现有的帐户上Facebook,谷歌,雅虎,Twitter的,MySpace和AOL的Windows Live/MSN/Hotmail的用户进行身份验证,或任何其他OpenID提供商。

+3

甚至认为RPX可能非常有用,如果没有任何派对,我会更喜欢它,除了我和谷歌参与了身份验证。这可能很好,但我不想要第三方依赖。 – 2010-01-27 08:17:21

6

要真正回答你的问题(即忽略所有的争议点),我使用DotNetOpenAuth来实现对我的某个站点的OpenID授权;这是相当微不足道的。

这只是一个.NET控件,你可以放下它,配置少量的东西,然后让它链接到Forms身份验证。相当不错。

+1

我很喜欢图书馆,我自己也用它,它很花哨。但是,您是否尝试过使用Google Apps for SSO(单点登录)的OAuth? – 2010-01-27 17:55:57

4

好的,你有一个标题下有很多问题。让我看看我是否可以分解它。

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标准中的任何东西。

+0

内容翔实,但它仍然不是简单的或有足够的细节,我得到它。 OpenID对我来说依然是一个谜......为什么当它实际上是一个消费者时称之为提供者,为什么当它看起来像一个终点时说OpenID标识符?我已经在这么多层面上感到困惑。 – 2010-01-27 21:05:09

+0

你对我上面特别写的东西感到困惑吗? 关于术语,您是否阅读过http://openid.net/specs/openid-authentication-2_0.html#terminology的术语部分? – keturn 2010-01-27 21:45:48

+0

我承认我没有阅读规范。关于术语的部分是有用的,但是可以选择单词吗?我在术语方面存在问题。只是我不应该将规范变成理解OpenID如何被删除,并不是我介意技术部分,而是它在文档中不熟悉并且有点奇怪。必须在某种程度的抽象上讨论它如何工作,但没有提到它在实践中的工作原理。我现在正在开始自己找出一些东西。尽管我很欣赏所有的帮助,但我希望不用说。 – 2010-01-28 06:32:48

-1

以我的经验,是的。

我正在尝试使用DotNetOpenAuth,特别是在单声道上,并没有得到任何快速,我尝试了很多方法来使它工作,并最终变得非常沮丧。

没有其他选择我用LoginRadius(已经与WordPress站点我使用),并发现它容易得多,再加上它会弹出一个弹出窗口做这是我怎么会跟DotNetOpenAuth希望它的认证。

他们现在看起来很自由,但它说测试版。所以他们可能会在未来收费...