- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
你好,我在 asp.net 中有以下代码。我已经将 DotNetOpenAuth.dll 用于 openID。代码在
protected void openidValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
// This catches common typos that result in an invalid OpenID Identifier.
args.IsValid = Identifier.IsValid(args.Value);
}
protected void loginButton_Click(object sender, EventArgs e)
{
if (!this.Page.IsValid)
{
return; // don't login if custom validation failed.
}
try
{
using (OpenIdRelyingParty openid = this.createRelyingParty())
{
IAuthenticationRequest request = openid.CreateRequest(this.openIdBox.Text);
// This is where you would add any OpenID extensions you wanted
// to include in the authentication request.
ClaimsRequest objClmRequest = new ClaimsRequest();
objClmRequest.Email = DemandLevel.Request;
objClmRequest.Country = DemandLevel.Request;
request.AddExtension(objClmRequest);
// Send your visitor to their Provider for authentication.
request.RedirectToProvider();
}
}
catch (ProtocolException ex)
{
this.openidValidator.Text = ex.Message;
this.openidValidator.IsValid = false;
}
}
protected void Page_Load(object sender, EventArgs e)
{
this.openIdBox.Focus();
if (Request.QueryString["clearAssociations"] == "1")
{
Application.Remove("DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.ApplicationStore");
UriBuilder builder = new UriBuilder(Request.Url);
builder.Query = null;
Response.Redirect(builder.Uri.AbsoluteUri);
}
OpenIdRelyingParty openid = this.createRelyingParty();
var response = openid.GetResponse();
if (response != null)
{
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
// This is where you would look for any OpenID extension responses included
// in the authentication assertion.
var claimsResponse = response.GetExtension<ClaimsResponse>();
State.ProfileFields = claimsResponse;
// Store off the "friendly" username to display -- NOT for username lookup
State.FriendlyLoginName = response.FriendlyIdentifierForDisplay;
// Use FormsAuthentication to tell ASP.NET that the user is now logged in,
// with the OpenID Claimed Identifier as their username.
FormsAuthentication.RedirectFromLoginPage(response.ClaimedIdentifier, false);
break;
case AuthenticationStatus.Canceled:
this.loginCanceledLabel.Visible = true;
break;
case AuthenticationStatus.Failed:
this.loginFailedLabel.Visible = true;
break;
// We don't need to handle SetupRequired because we're not setting
// IAuthenticationRequest.Mode to immediate mode.
////case AuthenticationStatus.SetupRequired:
//// break;
}
}
}
private OpenIdRelyingParty createRelyingParty()
{
OpenIdRelyingParty openid = new OpenIdRelyingParty();
int minsha, maxsha, minversion;
if (int.TryParse(Request.QueryString["minsha"], out minsha))
{
openid.SecuritySettings.MinimumHashBitLength = minsha;
}
if (int.TryParse(Request.QueryString["maxsha"], out maxsha))
{
openid.SecuritySettings.MaximumHashBitLength = maxsha;
}
if (int.TryParse(Request.QueryString["minversion"], out minversion))
{
switch (minversion)
{
case 1: openid.SecuritySettings.MinimumRequiredOpenIdVersion = ProtocolVersion.V10; break;
case 2: openid.SecuritySettings.MinimumRequiredOpenIdVersion = ProtocolVersion.V20; break;
default: throw new ArgumentOutOfRangeException("minversion");
}
}
return openid;
}
对于上面的代码,我总是得到
var claimsResponse = response.GetExtension<ClaimsResponse>();
我总是得到 claimsResponse == null
。它发生的原因是什么。 openid 是否有任何要求,例如 RelyingParty 的域验证?请尽快给我答复。
最佳答案
另请确保您已在提供商网站上注册您的 OpenID 帐户信息,并允许在登录过程中发送信息。我在使用 DotNetOpenAuth 时遇到了同样的问题,但事实证明我没有在我的 myOpenID 帐户上输入信息。以为总是发送电子邮件地址,但即使 OpenID 帐户连接到电子邮件地址,情况也并非如此。
等等myOpenID确保你有一个Registration Persona(你的账户->Registration Personas)
关于c# - claimsResponse 返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1326505/
你好,我在 asp.net 中有以下代码。我已经将 DotNetOpenAuth.dll 用于 openID。代码在 protected void openidValidator_ServerVali
我想知道如何在 DotNetOpenAuth 中模拟 ClaimseReponse 类? 这是类(删除一些属性): [Serializable] public sealed class ClaimsR
你好,我在 asp.net 中有以下代码。我已经将 DotNetOpenAuth.dll 用于 openID。代码在 protected void openidValidator_ServerVali
更新感谢@IvanL 的评论,事实证明问题是 Google 特有的。从那以后,我尝试了其他提供商,对于那些提供商,一切都按预期进行。 Google 似乎只是不发送 claim 信息。还没有弄清楚为什么
我是一名优秀的程序员,十分优秀!