NULL ClaimsResponse с DotNetOpenAuth в приложении ASP.NET MVC 2

Я пытаюсь заставить 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 ответа

Решение

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

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

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

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

fields.Email = DemandLevel.Require;
Другие вопросы по тегам