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文件复制了代码。正如你所知道的,你可以把所有的查询字符串检查和特殊逻辑都去掉。这只是为了支持一些互操作测试