我一直在努力开发OAuth2提供程序,我正在使用DotNetOpenAuth,我认为我已经完成了所有工作,但我忘了看看如果我拒绝访问第三方应用程序会发生什么。好吧,似乎库有问题,因为它引发了一个我不理解的错误。
我的开发基于dotnetopenauth ctp示例,theres是一个oauth提供程序实现,并试图拒绝访问示例上的应用程序,同样的事情发生。
错误是:DotNetOpenAuth.OAuth2.Messages.EndUserAuthorizationFailedResponse消息中缺少以下必需参数:错误
堆栈跟踪:http://pastebin.com/U95NTVxe。
所以:
请你不要前进。
答案 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没有完全实现的错误处理(或拒绝授权)。规范最终确定后,您可以期待完成此方案。