我在我的 asp 4.5 网站中使用 ClaimsPrincipalPermission 进行授权。
这工作正常。
但是,当用户尝试调用一个不允许他访问的页面时,返回的错误代码是 500,而不是像 401 这样的错误代码。
这是预期的行为吗?我假设 401 会更多地表达为什么这个页面不能被调用。
还是我有错误?在调试器中,我看到正确抛出了安全异常。
有没有办法改变这种行为?有谁知道为什么会这样?
我在我的 asp 4.5 网站中使用 ClaimsPrincipalPermission 进行授权。
这工作正常。
但是,当用户尝试调用一个不允许他访问的页面时,返回的错误代码是 500,而不是像 401 这样的错误代码。
这是预期的行为吗?我假设 401 会更多地表达为什么这个页面不能被调用。
还是我有错误?在调试器中,我看到正确抛出了安全异常。
有没有办法改变这种行为?有谁知道为什么会这样?
ClaimsPrincipalPermission 引发 SecurityException。您可能想使用与 Web 框架更好地配合的东西......
见这里: http: //leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/
500 错误代码似乎是 SecurityExceptions 的默认响应。
这个推理对我来说很有意义,因为 ASP.NET 不一定知道被拒绝访问的用户,它所知道的只是 SecurityException 被抛出某个地方。您的网站本身可能没有足够的权限来做某事,在这种情况下应该有 500 个。
异常过滤器是分析未捕获异常并找出您想要返回的 HTTP 代码的好方法。
ClaimsPrincipalPermissionAttribute 由 CLR 调用,并在角色检查失败的情况下引发 SecurityException。在这里查看解决方案。