【问题标题】:ASPNET Core identify which Requirement Policy failedASPNET Core 确定哪个需求策略失败
【发布时间】:2017-08-25 05:08:44
【问题描述】:

在使用授权策略时,是否可以了解哪个策略没有成功?

理想情况下,我希望能够修改中间件管道中的数据,以更好地确定为什么将 403 返回给 API 使用者。

此时返回的只是 403;禁止。

[Authorize] // Azure auth   
[Authorize(Policy="SessionIsValid")] // Ensure transaction sessions are valid
public class TaskController : Controller
{ /** code removed for brevity */ }

在 Statup.cs 的 configure 方法中是否可以理解策略失败的原因?

app.Use(async (context, next) =>
{
   await next();

   if (context.Response.StatusCode == 403 )
   {
       // which policy failed? need to inform consumer which requirement was not met
       await next()
    }

 });

【问题讨论】:

    标签: security .net-core authorize-attribute


    【解决方案1】:

    来自 ASPNET Core 文档

    Resource 属性的使用是特定于框架的。使用 Resource 属性中的信息会将您的授权策略限制为特定框架。您应该使用 as 关键字转换 Resource 属性,然后检查转换是否成功,以确保您的代码在其他框架上运行时不会因 InvalidCastExceptions 而崩溃;

    我的实现

        context.Fail();
    
        if ( context.Resource is Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext mvcContext) {           
           mvcContext.HttpContext.Response.StatusCode = 403;
           await mvcContext.HttpContext.Response.WriteAsync($"Forbidden; No valid Transaction Session Id for {context.User.Identity.Name}");                        
        }      
    

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      相关资源
      最近更新 更多