OpenID太复杂了吗?

Joh*_*ren 14 .net openid google-apps

尽管它有效,但我开始严重怀疑OpenID社区.

我正在将OpenID评估为"这个"网站的身份验证服务,虽然承诺很好,但我无法让它工作.我真的迷路了.

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

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

在我迷路的地方,涉及所有先决条件和依赖关系.

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

而且,这对我来说非常重要.

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

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

Noo*_*ilk 6

要实际回答你的问题(即无视所有论证点),我就像使用DotNetOpenAuth来为我的一个网站实施OpenID授权一样.而且这是非常微不足道的.

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


Joh*_*ren 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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