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

本文关键字:错误 dotnetopenauth 第三方 应用程序 拒绝访问 | 更新日期: 2023-09-27 18:20:12

我开发OAuth2提供程序已经有一段时间了,我正在使用DotNetOpenAuth,我以为我已经做好了一切,但我忘了看看如果我拒绝访问第三方应用程序会发生什么。这个库好像出了问题,因为它抛出了一个我不理解的错误。

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

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

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

因此:

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

让你不要前进。

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

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

希望这能有所帮助;)

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