如何查看ASP.NET Core中哪个AuthorizeAttribute授权失败
我太懂这种排查授权问题的痛苦了——当你在控制器或方法上叠加多个[Authorize]属性(不管是基于Role还是Policy的),一旦授权失败,日志里只笼统说“授权失败”,根本不知道到底是哪一项没通过,得一个个去试,效率极低。
好在这个问题已经被官方解决了!从**.NET 5.0**开始,ASP.NET Core的授权系统会在日志里明确标注具体失败的授权项:
- 如果是Policy验证失败,日志会显示类似
Authorization failed for Policy "Policy 2"的内容 - 如果是Role验证失败,也会明确指出是哪个Role没通过
举个你提到的例子:当你同时使用[Authorize(Policy = "Policy 1")]和[Authorize(Policy = "Policy 2")],且只有Policy 2验证失败时,日志会直接告诉你是Policy 2出了问题,不用再瞎猜。
这个特性是官方根据社区反馈后实现的,如果你还在使用.NET 5.0之前的版本,最省心的解决方案就是升级到较新的框架版本。如果暂时没法升级,虽然可以通过自定义授权Handler来手动记录失败项,但官方的原生实现显然更可靠、更省事儿。
内容的提问来源于stack exchange,提问作者Adam Stapleton
相关产品推荐
相关产品推荐

