Вы можете следить за Scott Allen's блог, который показывает, как сделать это с помощью какого-то промежуточного программного обеспечения:
// First, in the Startup class for the application, we will add the required services.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication();
services.AddAuthorization(options =>
{
options.AddPolicy("Authenticated", policy => policy.RequireAuthenticatedUser());
});
}
ProtectFolder
класса самого промежуточного слоя. Метод Invoke на объекте промежуточного ПО можно вводить, поэтому мы будем запрашивать текущую службу авторизации и использовать службу для авторизации пользователя, если текущий запрос направляется в защищенную папку. Если авторизация не удалась, мы используем диспетчер проверки подлинности для запроса пользователя, который обычно перенаправляет браузер на страницу входа в систему в зависимости от параметров проверки подлинности приложения.
public class ProtectFolderOptions
{
public PathString Path { get; set; }
public string PolicyName { get; set; }
}
public static class ProtectFolderExtensions
{
public static IApplicationBuilder UseProtectFolder(
this IApplicationBuilder builder,
ProtectFolderOptions options)
{
return builder.UseMiddleware<ProtectFolder>(options);
}
}
public class ProtectFolder
{
private readonly RequestDelegate _next;
private readonly PathString _path;
private readonly string _policyName;
public ProtectFolder(RequestDelegate next, ProtectFolderOptions options)
{
_next = next;
_path = options.Path;
_policyName = options.PolicyName;
}
public async Task Invoke(HttpContext httpContext,
IAuthorizationService authorizationService)
{
if(httpContext.Request.Path.StartsWithSegments(_path))
{
var authorized = await authorizationService.AuthorizeAsync(
httpContext.User, null, _policyName);
if (!authorized)
{
await httpContext.Authentication.ChallengeAsync();
return;
}
}
await _next(httpContext);
}
}
Назад в классе запуска приложения, мы настроим новое промежуточное программное обеспечение для защиты/секретный каталог с «Зарегистрированным» политики.
public void Configure(IApplicationBuilder app)
{
app.UseCookieAuthentication(options =>
{
options.AutomaticAuthentication = true;
});
// This must be before UseStaticFiles.
app.UseProtectFolder(new ProtectFolderOptions
{
Path = "/Secret",
PolicyName = "Authenticated"
});
app.UseStaticFiles();
// ... more middleware
}
'Перед тем, как MVC 6 появилась возможность создать файл web.config и поместить его в эту ограниченную папку' вы пробовали именно это? Это должно по-прежнему работать (возможно, вам нужно включить «статические файлы маршрута через ASP.NET») ... – ChrFin
Всегда проще попробовать, прежде чем отправлять вопрос о переполнении стека. Сохраняет смущение. – BenjaminPaul
Не правда ли, что web.config устарел в vNext? В мастере «Добавить новый элемент» такого шаблона нет. – azachert