首页 > 解决方案 > 使用 Autofac 的基于特征标志的授权

问题描述

我正在尝试在整个环境中推出授权,并希望在它向南时将其标记为快速回滚。一旦我们知道所有服务都与 OAuth 保持一致,此功能将被删除并成为永久性功能。我选择了IAutofacAuthorizationFilter注入一个对象来确定典型属性不提供的特征标志状态。

我想启用默认行为,就好像我已经装饰了控制器,[Authorize]如果该功能为真,否则让方法在没有它的情况下执行,但是我无法从IAutofacAuthorizationFilter没有基类的内部启用默认行为像await base.OnAuthorizationAsync(actionContext, cancellationToken);里面一样覆盖AuthorizeAttribute

到目前为止我所做的工作:

public class FeatureBasedAuthorizeAttribute : IAutofacAuthorizationFilter
{
     private readonly IFeatureManager _featureManager;

     public FeatureBasedAuthorizeAttribute(IFeatureManager featureManager)
     {
          _featureManager = featureManager;
     }

     public async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
     {
          if (_featureManager.IsEnabled<EnableAppAuthorization>())
          {
               // Return result of default ASP.Net authorization here... How?
          }
          // Return without Authorization (current state)
          await Task.FromResult(0);
     }
}

// Wire up in startup.cs
builder.Register(c => new FeatureBasedAuthorizeAttribute(c.Resolve<IFeatureManager>()))
                .AsWebApiAuthorizationFilterForAllControllers()
                .InstancePerRequest();

标签: c#asp.net-web-api2autofac

解决方案


最终,远离屏幕的时间为我解决了这个问题。我的解决方案是这样的:

public async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
     if (_featureManager.IsEnabled<EnableAppAuthorization>())
     {
          // Return result of default ASP.Net authorization
          var authorizeAttribute = new AuthorizeAttribute();
          await authorizeAttribute.OnAuthorizationAsync(actionContext, cancellationToken);
     }
     // Return without Authorization (current state)
     await Task.FromResult(0);
}

推荐阅读