【问题标题】:Environment dependent controller with [Authorize]具有 [Authorize] 的环境相关控制器
【发布时间】:2018-09-20 23:18:36
【问题描述】:

要将控制器标记为需要授权,您通常可以这样装饰它:

[Authorize]
public class MyController : Controller

我们的身份验证是通过第 3 方提供商进行的,并且考虑到它的设置方式,我们只希望它在我们的生产环境中实际生效,例如,我们不希望它在 QA 环境中处于活动状态。在 Startup.cs 文件中关闭环境很容易,但是有没有办法有条件地装饰控制器?我开始研究政策和角色,看起来它可能会被黑客入侵,但有更好的方法吗?

【问题讨论】:

    标签: c# asp.net controller authorization


    【解决方案1】:

    如果您使用的是 Asp.NET Core,请遵循此处的文档:

    https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1 https://docs.microsoft.com/en-us/aspnet/core/security/authorization/dependencyinjection?view=aspnetcore-2.1

    您可以像这样制定自定义策略:

    public class EnvironmentAuthorize : IAuthorizationRequirement
    {
        public string Environment { get; set; }
    
        public EnvironmentAuthorize(string env)
        {
            Environment = env;
        }
    }
    
    public class EnvironmentAuthorizeHandler : AuthorizationHandler<EnvironmentAuthorize>
    {
        private readonly IHostingEnvironment envionment;
    
        public EnvironmentAuthorizeHandler(IHostingEnvironment env)
        {
            envionment = env;
        }
    
        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, EnvironmentAuthorize requirement)
        {
            if (requirement.Environment != envionment.EnvironmentName)
            {
                context.Succeed(requirement);
            }
    
            return Task.CompletedTask;
        }
    }
    

    在 de Startup.cs 中:

            services.AddAuthorization(options =>
            {
                options.AddPolicy("ProductionOnly", policy =>
                    policy.Requirements.Add(new EnvironmentAuthorize("Production")));
            });
    
            services.AddSingleton<IAuthorizationHandler, EnvironmentAuthorizeHandler>();
    

    在控制器中:

    [Authorize(Policy = "ProductionOnly")]
    public class MyController : Controller
    

    虽然有可能,但我不建议这样做,在不同的环境中具有不同的行为真的是一场噩梦。

    【讨论】:

    • 这正是我一直在寻找的,也是我所想象的。非常感谢您的详细回复。
    • “在不同的环境中有不同的行为真是一场噩梦。”我完全同意,但通常情况下,我无法控制他们的环境或他们的要求,再次感谢
    猜你喜欢
    • 2018-02-14
    • 2020-07-14
    • 2013-05-02
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多