c# – claimsResponse返回Null

您好,我在asp.net中有以下代码.我使用DotNetopenAuth.dll for 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>();

我总是得到claimResponse == null.它发生的原因是什么?对于RelyingParty的openid like域验证是否有任何要求?请尽快给我答复.

解决方法

还要确保您已在提供商网站上的OpenID帐户中注册了信息,并允许在登录过程中发送信息.我使用DotNetopenAuth遇到了同样的问题,但事实证明我没有在myOpenID帐户上输入信息.认为始终发送电子邮件地址,但即使OpenID帐户已连接到电子邮件地址,情况也不是这样.

因此,在myOpenID,请确保您有注册角色(您的帐户 – >注册角色)

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...