NULL ClaimsResponse с DotNetOpenAuth в приложении ASP.NET MVC 2 - PullRequest
1 голос
/ 27 августа 2010

Я пытаюсь заставить DotNetOpenAuth (последнюю версию) работать с веб-сайтом ASP.NET MVC 2.Первая часть работает, действие вызывается, когда пользователь выбирает провайдера OpenID, я передаю правильный идентификатор, затем меня перенаправляют правильно на сайт провайдера, меня перенаправляют обратно на мой сайт, но возникает проблема.

Запрошенные мною претензии недействительны (см. Код ниже).

public ActionResult TryAuth(string openid_identifier)
{
    var openid = new OpenIdRelyingParty();
    var response = openid.GetResponse();
    if(response== null)
    {
        var req = openid.CreateRequest(openid_identifier);
        req.AddExtension(new ClaimsRequest
                            {
                                Email = DemandLevel.Require,
                                Nickname = DemandLevel.Require
                            });
        return req.RedirectingResponse.AsActionResult();
    }
    switch(response.Status)
    {
        case AuthenticationStatus.Authenticated:
            {
                var data = response.GetExtension(typeof(ClaimsResponse)) as ClaimsResponse;
                // data is null <-----------------------------------------
                return View("Index");
            }
    }
    return View("Index");
}

Я был бы очень признателен, если бы кто-нибудь мог указать на (не очень) очевидную ошибку, которую я совершаю.

Ответы [ 2 ]

5 голосов
/ 23 сентября 2011

У меня была такая же проблема, пока я не обнаружил, что для Google вы должны установить поле электронной почты для DomainLevel.Require вместо DomainLevel.Request (Необязательно)

fields.Email = DemandLevel.Require;
3 голосов
/ 27 августа 2010

Пожалуйста, просмотрите все подобные вопросы. См. Это

Ваш код выглядит нормально. Убедитесь, что вы активировали AXFetchAsSregTransform в файле web.config, чтобы максимально увеличить вероятность получения чего-либо обратно. Поставщик должен предоставить вам какие-либо атрибуты. Некоторые провайдеры, такие как Yahoo, требуют, чтобы ваш RP правильно реализовывал RP Discovery, что демонстрируют примеры RP, поставляемые с DotNetOpenAuth.

Вот мой пост в блоге о том, как правильно сделать RP Discovery . Сделайте это и попробуйте сайты, которые вы тестировали снова. Помните также, что некоторые провайдеры кэшируют результаты RP Discovery, поэтому вы можете применить все свои исправления RP Discovery, и вам все равно придется подождать час или день, прежде чем провайдеры начнут предоставлять вам данные.

...