首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenAuth .Net Claims请求始终为空

OpenAuth .Net Claims请求始终为空
EN

Stack Overflow用户
提问于 2010-06-28 05:49:58
回答 3查看 1.8K关注 0票数 3

我一直在使用DoNetOpenAuth库,并遵循示例here

身份验证正在工作,但即使我需要一封电子邮件,claimsresponse也是空的。事实上,我需要什么并不重要,claimsresponse总是空的。不知道我做错了什么,我很感谢你的帮助。

提前谢谢。

这是我的登录按钮代码

代码语言:javascript
复制
protected void btnSubmit_Click( object sender, EventArgs e )
    {
        //Login button has been pushed. Add an extension and redirect
        using (OpenIdRelyingParty openId = new OpenIdRelyingParty())
        {
            IAuthenticationRequest request = openId.CreateRequest( txtOpenID.Text );

            request.AddExtension( new ClaimsRequest
                                    {
                                        Email = DemandLevel.Require,
                                        Country = DemandLevel.Request,
                                        TimeZone = DemandLevel.Request
                                    } );

            request.RedirectToProvider();

        }
    }

下面是页面加载代码。但是,ClaimsResponse变量始终为空。

代码语言:javascript
复制
protected void Page_Load( object sender, EventArgs e )
    {
        OpenIdRelyingParty openId = new OpenIdRelyingParty();
        var response = openId.GetResponse();

        //check if we're processing a request
        if(response != null)
        {
            switch ( response.Status )
            {
                case AuthenticationStatus.Authenticated:

                    //authentication worked. grab our required fields
                    var claimsResponse = response.GetExtension<ClaimsResponse>();

                    //TODO enter required fields into the database

                    break;
                case AuthenticationStatus.Canceled:
                    //TODO handle cancel
                    break;

                case AuthenticationStatus.Failed:
                    //TODO handle failed
                    break;
            }
        }
    }
EN

回答 3

Stack Overflow用户

发布于 2011-03-13 05:18:28

我在雅虎和谷歌都面临着同样的问题。然而,这个MVC示例在这个示例working Sample中工作得很好。当我试图将这个解决方案转换成普通的ASP.NET 2时,我就遇到了这个问题

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e) 
{
    if (this.Request.HttpMethod == "POST")
    {
        var openid = new OpenIdRelyingParty();
        string openid_identifier = this.openid_identifier.Text;
        IAuthenticationRequest request = Openid.CreateRequest(Identifier.Parse(openid_identifier));
        var fields = new ClaimsRequest();
        fields.Email = DemandLevel.Require;
        fields.FullName = DemandLevel.Require;               
        request.AddExtension(fields);
        this.Response.ContentType = "text/html";
        request.RedirectingResponse.Send();
        return;
    }
    else
    {
        OpenIdRelyingParty openid = new OpenIdRelyingParty();
        IAuthenticationResponse response = openid.GetResponse();
        if (Request.Params["ReturnUrl"] != null)
            Session["ReturnUrl"] = Request.Params["ReturnUrl"];
        if (response != null && response.Status == AuthenticationStatus.Authenticated)
        {
            var claimUntrusted = response.GetUntrustedExtension<ClaimsResponse>();
            var claim = response.GetExtension<ClaimsResponse>();
            UserData userData = null;
            if (claim != null)
            {
                userData = new UserData();
                userData.Email = claim.Email;
                userData.FullName = claim.FullName;
            }
            //now store Forms Authorisation cookie 
            IssueAuthTicket(userData, true);
            //store ClaimedIdentifier it in Session 
            //(this would more than likely be something you would store in a database I guess
            Session["ClaimedIdentifierMessage"] = response.ClaimedIdentifier;
            //If we have a ReturnUrl we MUST be using forms authentication, 
            //so redirect to the original ReturnUrl
            if (Session["ReturnUrl"] != null)
            {
                string url = Session["ReturnUrl"].ToString();
                this.Response.Redirect(url,true);
                return;
            }
            //This should not happen if all controllers have [Authorise] used on them
            else
                throw new InvalidOperationException("There is no ReturnUrl");
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-09-24 18:03:46

斯科特·汉瑟曼最近有一部podcast on DoNetOpenAuth。在播客中,DotNetOpenAuth的作者Scott Arnott声称谷歌的OAuth实现没有完全符合规范,并说它应该失败而不是返回null。

票数 1
EN

Stack Overflow用户

发布于 2010-09-23 23:50:17

事实证明,Google不会发回您请求的任何信息。他们将进行身份验证,但仅此而已。希望这篇文章能帮助其他人解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3129013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档