asp.net – 从Owin WebApi2返回描述性401消息
我有一个使用owin运行的asp.net 4.5 web api.无论何时发出未经授权的请求,它都会按预期返回401以及以下响应:
{"Message":"Authorization has been denied for this request."} 我想为此响应添加其他详细信息(过期令牌,无效角色等),并基于此SO post实现自定义[AuthorizeAttribute]. public class MyAuthorizeAttribute : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) { var response = actionContext.Request.CreateResponse<MyError> (new MyError() { Description = "This is why you're unauthorized" }); response.StatusCode = HttpStatusCode.Unauthorized; actionContext.Response = response; } } 然后在我的控制器上使用它,如下所示: [MyAuthorizeAttribute(Roles = "Foo")] public class MyController : ApiController { ... } 返回401,并按预期返回以下响应: {"Description": "This is why you're unauthorized"} 但是,我没有看到如何从传递给MyAuthorizeAttribute.HandleUnauthorizedRequest的HttpActionContext中确定请求未经授权的原因.例如,当我在本地调试并使用过期令牌发出请求时,它会抛出一个解释IDX10223的SecurityTokenExpiredException:Lifetime验证失败.令牌已过期.有效期:’…’当前时间:’…’.或者对于无效的受众,它会抛出SecurityTokenInvalidAudienceException,解释Message = IDX10214:受众验证失败.观众:’……’.不匹配:validationParameters.ValidAudience:’null’或validationParameters.ValidAudiences:’…’.我已经在我的Startup.cs中设置了几个断点,但在它们被抛出之前甚至无法捕获其中一个异常. 如何使用owin中间件确定请求未经授权的具体原因? 解决方法
还没有弄清楚如何识别过期和无效的受众等等,但我最终使用它来至少根据角色返回403s.
您可以使用上面问题中的示例自定义消息(“您必须具有角色X以访问此操作…”). public class MyAuthorizeAttribute : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) { base.HandleUnauthorizedRequest(actionContext); if (actionContext.RequestContext.Principal != null && actionContext.RequestContext.Principal.Identity.IsAuthenticated && Roles != null) { if (!Roles.Split(',').Any(x => actionContext.RequestContext.Principal.IsInRole(x.Trim()))) { actionContext.Response.StatusCode = HttpStatusCode.Forbidden; } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 部分视图模型无法解析
- DxPackNet 3.音频捕捉(录音)
- asp输出xml格式文件时的一个诡异错误及解决方法:
- asp.net-mvc – ASP.NET MVC局部视图和表单动作名
- asp.net – TextBox在使用TextMode Number回发后
- asp.net核心 – JSON属性现在从ASP .Net Core 1.
- asp.net-mvc-4 – 如何在mvc布局中添加徽标?
- asp.net – 当前上下文中不存在名称“GridView1”
- asp.net-mvc – 在我的asp.net MVC解决方案中保持
- asp.net – NVelocity没有找到模板