拒绝访问第三方应用程序时出现奇怪错误dotnetopenauth
本文关键字:错误 dotnetopenauth 第三方 应用程序 拒绝访问 | 更新日期: 2023-09-27 18:20:12
我开发OAuth2提供程序已经有一段时间了,我正在使用DotNetOpenAuth,我以为我已经做好了一切,但我忘了看看如果我拒绝访问第三方应用程序会发生什么。这个库好像出了问题,因为它抛出了一个我不理解的错误。
我的开发基于dotnetopenauth-ctp示例,有一个oauth提供程序实现,并试图拒绝访问该示例上的应用程序,同样的事情也发生了。
错误为:DotNetOpenAuth.OAuth2.Messages.EndUserAuthorizationFailedResponse消息中缺少以下必需参数:error
堆栈跟踪:http://pastebin.com/U95NTVxe.
因此:
- 应用程序请求授权
- 然后我登录需要授予授权的用户
- 然后auth服务器询问用户是否愿意授予应用程序访问其资源的权限
- 当用户单击"否"时,会发生此错误
让你不要前进。
我不得不处理同样的问题。我通过将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没有完全实现错误处理(或拒绝授权)。当规范最终确定后,您可以期待这个场景完成。