我开始严重怀疑OpenID社区,尽管它有效。
我正在将OpenID评估为“此”网站的身份验证服务,虽然承诺很好,但我无法让它工作。我真的迷路了。
我要求SO社区帮助我。给我答案并向我展示示例,以便我可以按照预期的方式利用它。
我的情景非常典型。我想通过特定的Google Apps域对用户进行身份验证。如果您有权访问此Google Apps域,则可以访问我的Web应用程序。
我迷路的地方,涉及所有先决条件和依赖关系。
此外,这对我来说非常重要。
当我登录SO时,我使用的是Google帐户。当我点击登录按钮时,我会看到此确认页面。我授予SO使用我的Google帐户凭据的权利。
不知何故,谷歌知道它是“Stackoverflow.com”,它问我是否可以登录。我想知道我对这个小文本有什么样的控制方式。我打算在几个不同的域上部署OpenID,但我更愿意,如果它们都可以工作,而不必单独配置特殊参数,例如秘密API密钥,什么不是。但是,我不确定这是否是OpenID的先决条件,或Google提供的联合登录API。
答案 0 :(得分:6)
要实际回答你的问题(即忽略所有论证点),我就像使用DotNetOpenAuth来为我的某个网站实施OpenID授权一样。这真是微不足道。
它只是一个.NET控件,你可以删除它,配置很少的东西,然后让它链接到Forms身份验证。非常好。
答案 1 :(得分: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提供商可能认为有价值的一些功能 - 比如“如何以更加用户友好的方式告诉用户他们登录的网站比向他们显示网址摘录“或”我如何识别此请求实际上来自RP我与“具有某种合同关系”,但这些功能不是OpenID 2.0标准中的任何内容。
答案 2 :(得分: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请求。检查该请求是否包含有效的登录信息。
答案 3 :(得分:2)
听起来你真的想调查RPX - 它是一个解决方案,使开发人员(和用户)可以轻松使用他们首选的身份验证机制,包括OpenID。
作为第三方身份提供商与您网站之间的代理,RPX可帮助您通过Facebook,Google,Yahoo!,Twitter,MySpace,AOL,Windows Live / MSN / Hotmail或其他任何网站上的现有帐户轻松验证用户身份OpenID提供商。
答案 4 :(得分:-1)
根据我的经验,是的。
我试图使用DotNetOpenAuth,特别是在Mono上,并且无处可去,我尝试了很多方法让它工作,并最终变得非常沮丧。
没有替代方案我使用LoginRadius(已经使用我的WordPress网站),发现它更容易,而且它弹出一个弹出窗口来进行身份验证,这就是我想要它的方式与DotNetOpenAuth。
他们此刻看起来自由,但它说Beta。所以他们将来可能会收取费用......