Чтобы пометить контроллер как требующий авторизации, вы обычно украшаете его следующим образом:
[Authorize]
public class MyController : Controller
Наша аутентификация осуществляется через стороннего поставщика, и, учитывая способ его настройки, мы хотим, чтобы это действительно действовало только в нашей производственной среде, мы не хотим, чтобы она была активна, например, в среде QA. Отключить среду в файле Startup.cs легко, но есть ли способ условно украсить контроллеры? Я начал смотреть на политики и роли, и мне показалось, что их можно взломать, но есть ли способ лучше?





Если вы используете Asp.NET Core, следуйте документации здесь:
https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1https://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;
}
}
В файле 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
Хотя это возможно, я не могу рекомендовать это, разное поведение в разных средах - это кошмар действительно.
«различное поведение в разных средах - настоящий кошмар». Я не могу согласиться с большим, но, как это часто бывает, это ситуация, когда я не могу контролировать их среду или их требования, еще раз спасибо
это именно то, что я искал и во многом то, что я себе представлял. Большое спасибо за подробный ответ.