拒绝访问第三方应用程序时出现奇怪的错误dotnetopenauth

时间:2012-01-11 18:01:59

标签: c# dotnetopenauth oauth-2.0

我一直在努力开发OAuth2提供程序,我正在使用DotNetOpenAuth,我认为我已经完成了所有工作,但我忘了看看如果我拒绝访问第三方应用程序会发生什么。好吧,似乎库有问题,因为它引发了一个我不理解的错误。

我的开发基于dotnetopenauth ctp示例,theres是一个oauth提供程序实现,并试图拒绝访问示例上的应用程序,同样的事情发生。

错误是:DotNetOpenAuth.OAuth2.Messages.EndUserAuthorizationFailedResponse消息中缺少以下必需参数:错误

堆栈跟踪:http://pastebin.com/U95NTVxe

所以:

  • 应用程序请求授权
  • 然后我登录需要授权的用户
  • 然后auth服务器询问用户是否愿意授予应用程序访问其资源的权限
  • 当用户点击“否”时,会发生此错误

请你不要前进。

2 个答案:

答案 0 :(得分:1)

我不得不处理同样的问题。我通过将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();
    }

希望这会有所帮助;)

答案 1 :(得分:0)

OAuth 2规范中的错误处理不是很稳定(规范本身未完成)。因此,DotNetOpenAuth OAuth 2.0 CTP没有完全实现的错误处理(或拒绝授权)。规范最终确定后,您可以期待完成此方案。