Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不访问.Net中的openid站点的情况下传递用户为openid提供的密码?_C#_Asp.net_Openid_Dotnetopenauth - Fatal编程技术网

C# 如何在不访问.Net中的openid站点的情况下传递用户为openid提供的密码?

C# 如何在不访问.Net中的openid站点的情况下传递用户为openid提供的密码?,c#,asp.net,openid,dotnetopenauth,C#,Asp.net,Openid,Dotnetopenauth,我正在使用下面的代码 OpenIdRelyingParty createRelyingParty() { OpenIdRelyingParty openid = new OpenIdRelyingParty(); int minsha, maxsha, minversion; if (int.TryParse(Request.QueryString["minsha"], out minsha)) { openid.Settings.MinimumH

我正在使用下面的代码

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站点的情况下进行身份验证。你能帮我一个忙吗?谢谢如果我理解正确,你要做的是在你的网站上捕获OpenID用户名和密码,然后在后台将它们传递给OpenID进行身份验证。你不觉得这是个很坏的主意吗?如果OpenID使这成为可能,我将停止使用它们。我不希望他们为客户端应用程序提供获取我的用户名和密码的能力,非常感谢

OpenID是以这种方式构建的,以防止从属方获取密码

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

例如,我的OpenID没有密码,它有一个证书+验证 我的后备方案是用户名+密码+Yubikey OTP登录


所以,实际上。。。这个问题不可能按照您想象的方式解决,因为密码甚至可能不是OpenID的一部分,或者不足以启用登录。

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

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

顺便说一句,看起来您是从DotNetOpenId示例的loginProgrammatic.aspx.cs文件复制了代码。正如你所知道的,你可以把所有的查询字符串检查和特殊逻辑都去掉。这只是为了支持一些互操作测试