Запрос претензий OpenAuth .Net всегда пуст - PullRequest
3 голосов
/ 28 июня 2010

Я использовал библиотеку DoNetOpenAuth и последовал примеру здесь

Аутентификация работает, но, хотя мне требуется электронная почта, ответ на претензии не имеет значения. На самом деле, не имеет значения, что мне нужно, ответы на запросы всегда нулевые. Не уверен, что я делаю неправильно, и я был бы признателен за вашу помощь.

Заранее спасибо.

Вот мой код кнопки входа в систему

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 всегда равна нулю.

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;
            }
        }
    }

Ответы [ 4 ]

4 голосов
/ 13 марта 2011

Наконец: Вопрос в web.config

добавить

&ltconfiguration>
    &ltconfigSections>
        &ltsection name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/>
&lt/configSections>
&lt/configuration>

&ltdotNetOpenAuth>
&ltopenid>
&ltrelyingParty>
&ltbehaviors>
&ltadd type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth"/>
                &lt/behaviors>
&lt/relyingParty>
&lt/openid>
&lt/dotNetOpenAuth>

Это все, и оно должно работать.

2 голосов
/ 13 марта 2011

У меня одна и та же проблема с Yahoo и Google.однако этот образец MVC прекрасно работает в этом примере рабочий образец .... Я столкнулся с этой проблемой, когда пытался преобразовать это решение в обычный ASP.NET 2

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");
        }
    }
}
1 голос
/ 24 сентября 2010

Скотт Хансельман имеет недавний подкаст на DoNetOpenAuth .На подкасте Скотт Арнотт, автор DotNetOpenAuth, утверждает, что реализация OAuth от Google не соответствует спецификациям, и говорит, что он должен завершиться с ошибкой, а не вернуть ноль.

0 голосов
/ 23 сентября 2010

Оказывается, что Google не отправляет обратно запрашиваемую вами информацию. Они будут аутентифицироваться, но это все. Надеюсь, что это поможет кому-то еще с этой проблемой.

...