oauth-2.0 – 在MVC6应用程序中的OAuth令牌到期
|
所以我有一个包含身份服务器(使用ThinkTecture的IdentityServer3)和MVC6 Web服务应用程序的MVC6应用程序. 在Web服务应用程序中,我在启动时使用此代码: app.USEOAuthBearerAuthentication(options =>
{
options.Authority = "http://localhost:6418/identity";
options.AutomaticAuthentication = true;
options.Audience = "http://localhost:6418/identity/resources";
});
然后我有一个控制器,其操作具有Authorize属性. 我有一个使用身份服务器进行身份验证的JavaScript应用程序,然后使用提供的JWT令牌来访问Web服务操作. 这是有效的,我只能使用有效的令牌访问该操作. 当JWT已经过期时,问题出现.我得到的是似乎是一个详细的ASP.NET 500错误页面,它返回以下异常的异常信息:
对于OAuth而言,我非常新颖,并且保护了Web API,所以我可能会偏离基数,但是对于一个过期的令牌来说,一个500错误似乎不适合我.对于Web服务客户端绝对不友善. 这是预期的行为,如果不是,有什么需要做的,以获得更适当的回应? 解决方法编辑:在ASP.NET Core RC2中修复了此错误,并且不再需要此答案中描述的解决方法.注意:此解决方法将无法在ASP.NET 5 RC1,due to this other bug上运行.您可以迁移到RC2夜间构建或创建自定义中间件,捕获JWT承载中间件抛出的异常并返回401响应: app.Use(next => async context => {
try {
await next(context);
}
catch {
// If the headers have already been sent,you can't replace the status code.
// In this case,throw an exception to close the connection.
if (context.Response.HasStarted) {
throw;
}
context.Response.StatusCode = 401;
}
});
可悲的是,这是JWT / OAuth2承载中间件(由MSFT管理)目前默认工作的方式,但最终应该是固定的.有关更多信息,请参阅此GitHub门票:https://github.com/aspnet/Security/issues/411 幸运的是,您可以通过使用AuthenticationFailed通知“轻松”解决此问题: app.USEOAuthBearerAuthentication(options => {
options.Notifications = new OAuthBearerAuthenticationNotifications {
AuthenticationFailed = notification => {
notification.HandleResponse();
return Task.FromResult<object>(null);
}
};
}); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-web-api – 可以从Request对象获取当前的MediaType
- asp.net-mvc – 如何将asp.net mvc集成到Web站点项目中
- 如何在Asp.NET MVC中干净地重用编辑/新视图
- ASP.NET中的c# – die()或exit()功能
- ASP.NET MVC:使用LINQ To SQL获取表单复选框到多对数DB as
- asp.net-mvc – ASP.NET MVC:处理取消按钮的正确方法
- dependency-injection – Ninject:构造函数参数
- asp.net – Windows Workflow Foundation的替代方案
- IIS ASP.Net网站 – ManagedPipelineHandler错误(尝试对不存
- 使用ASP.NET和C#在DropDownList中选择多个值
- 从asp.net ListBox中获取所有选定的项目
- asp.net – 脚本管理器和工具包脚本管理器之间的
- asp.net上传文件到数据库的解决方案
- asp.net-mvc-3 – 如果在Razor中的else语句不起作
- asp.net-mvc – 如何在ASP.NET MVC中阻止JSON序列
- asp.net – 如何使RequiredFieldValidator更改父
- asp.net-mvc – 为什么我要将WCF与MVC一起使用?
- asp.net-mvc – IIS劫持CORS Preflight OPTIONS请
- 如何为Asp.Net中的所有子文件夹注册HttpHandler?
- asp.net-mvc-4 – 在MVC4中捕获404错误
