странная ошибка dotnetopenauth при запрете доступа к стороннему приложению - PullRequest
1 голос
/ 11 января 2012

Я довольно долго работал над разработкой поставщика OAuth2 и использую DotNetOpenAuth, и я думал, что у меня все работает, но я забыл посмотреть, что произойдет, если я откажу в доступе к стороннему приложению. Ну, похоже, что-то не так с библиотекой, потому что она выдает ошибку, которую я не понимаю.

Я основал свою разработку на образцах dotnetopenauth ctp, это была реализация oauth-провайдера, и я попытался запретить доступ к приложению на примере, и то же самое происходит.

Ошибка: в сообщении DotNetOpenAuth.OAuth2.Messages.EndUserAuthorizationFailedResponse отсутствуют следующие обязательные параметры: ошибка

Трассировка стека: http://pastebin.com/U95NTVxe.

Итак:

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

Спасибо за продвижение.

Ответы [ 2 ]

1 голос
/ 21 марта 2014

Я должен был справиться с той же проблемой.Я исправил это путем преобразования IDirectProtocolMessage в EndUserAuthorizationFailedResponse, затем установил ошибку самостоятельно и передал ответ этого объекта в PrepareResponse ().

public ActionResult AuthorizeResponse(bool isApproved)
    {
        var pendingRequest = this.authorizationServer.ReadAuthorizationRequest();

        IDirectedProtocolMessage response;
        if (isApproved)
        {
            //TODO Save authorization here
            response = this.authorizationServer.PrepareApproveAuthorizationRequest(pendingRequest, SessionManager.SsoUser.Username);
        }
        else
        {
            response = this.authorizationServer.PrepareRejectAuthorizationRequest(pendingRequest);

            // Here I set the error by myself
            var errorResponse = response as EndUserAuthorizationFailedResponse;
            errorResponse.Error = "access_denied";
            errorResponse.ErrorDescription = "User rejected the authorization.";

            // And return errorResponse instead of simple response
            return this.authorizationServer.Channel.PrepareResponse(errorResponse).AsActionResult();
        }
        return this.authorizationServer.Channel.PrepareResponse(response).AsActionResult();
    }

Надеюсь, это поможет;)

0 голосов
/ 14 января 2012

Обработка ошибок в спецификации OAuth 2 была не очень стабильной (сама спецификация не завершена). Поэтому в CTP-файлах DotNetOpenAuth OAuth 2.0 обработка ошибок (или отказ в авторизации) не реализована полностью. Когда спецификация будет завершена, вы можете ожидать, что этот сценарий будет завершен.

...