0

我正在使用下面的代码。

OpenIdRelyingParty createRelyingParty()
{
    OpenIdRelyingParty openid = new OpenIdRelyingParty();
    int minsha, maxsha, minversion;
    if (int.TryParse(Request.QueryString["minsha"], out minsha))
    {
        openid.Settings.MinimumHashBitLength = minsha;
    }
    if (int.TryParse(Request.QueryString["maxsha"], out maxsha))
    {
        openid.Settings.MaximumHashBitLength = maxsha;
    }
    if (int.TryParse(Request.QueryString["minversion"], out minversion))
    {
        switch (minversion)
        {
            case 1: openid.Settings.MinimumRequiredOpenIdVersion = ProtocolVersion.V10; break;
            case 2: openid.Settings.MinimumRequiredOpenIdVersion = ProtocolVersion.V20; break;
            default: throw new ArgumentOutOfRangeException("minversion");
        }
    }
    return openid;
}

OpenIdRelyingParty openid = createRelyingParty();  
IAuthenticationRequest request = openid.CreateRequest(openIdBox.Text); 

request.RedirectToProvider();  

上面的行去openid站点进行身份验证。但是我想在不去openid站点的情况下进行身份验证。你能帮我吗。谢谢

4

4 回答 4

18

如果我理解正确,您要做的是在您的网站上捕获 OpenID 用户名和密码,然后在后台将它们传递给 OpenID 进行身份验证。你不觉得这是一个非常糟糕的主意吗?如果 OpenID 使这成为可能,我将停止使用它们。我不希望他们为客户端应用程序提供获取我的用户名和密码的能力,非常感谢...!!!!!!

于 2009-07-10T10:15:14.147 回答
9

OpenID 就是以这种方式构建的,以防止依赖方获取密码。

此外,用户名 + 密码并不是用户登录 OpenID 的唯一可能方式

例如,我的 OpenID 没有密码,它有证书 + 验证,而我的后备有用户名 + 密码 + Yubikey OTP 登录。

所以,有效地......不可能按照您想象的方式处理这个问题,因为密码甚至可能不是 OpenID 的一部分,或者不足以启用登录。

于 2009-07-10T10:27:04.183 回答
3

当您使用 OpenID 时,您将赋予他们身份识别和身份验证的责任,他们会为您做这件事。如果您想在代码中查看用于验证和处理它的信息,OpenID 不适合您。

于 2009-07-10T11:55:35.817 回答
0

避免重定向到 Provider 的唯一方法是使用弹出窗口。最新版本的 DotNetOpenAuth (v3.2) 添加了弹出窗口行为,以便您可以执行此操作。使用 OpenIdTextBox 控件并将其 Popup 属性设置为 Always。

顺便说一句,您似乎从 DotNetOpenId 示例的 loginProgrammatic.aspx.cs 文件中复制了代码。正如你所知,你可以去掉所有的 QueryString 检查和特殊逻辑。那只是为了支持一些互操作测试。

于 2009-07-11T15:06:18.743 回答