UPDATE: К сожалению, перезагрузка Windows, решить эту проблему -.-авторизации для анонимного пользователя (автоматическая аутентификация)
В нашем приложении ASP.NET ядра (1,0 RC2), мы имеем следующее требование : только пользователи из внутренней сети должны иметь доступ к некоторым страницам «Отладка» (размещается в MVC Core). Это общедоступный веб-сайт, и у нас нет пользовательских логинов, вместо этого мы до сих пор управляли им с помощью авторизации на основе IP-адреса (обратите внимание: это не является риском для безопасности в нашем случае, потому что у нас есть прокси между ними, поэтому IP-адрес нельзя подделать извне).
Мы также хотим реализовать такую авторизацию на основе IP-адресов в ядре ASP.NET. Для этого мы используем настраиваемую политику "DebugPages"
и соответствующие определения [Authorize(Policy="DebugPages")]
на контроллере MVC. Потом мы заметили, что мы должны быть авторизованным пользователем, чтобы получить AuthorizeAttribute
прыгать и мы создаем один в запросе трубопровода, который дает на следующий код в Startup.cs (укороченный для краткости):
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthorization(options =>
{
options.AddPolicy(
"DebugPages",
policy => policy.RequireAssertion(
async context => await MyIPAuthorization.IsAuthorizedAsync()));
});
}
public void Configure(IApplicationBuilder app)
{
...
app.Use(async (context, next) =>
{
context.User = new ClaimsPrincipal(new GenericIdentity("anonymous"));
await next.Invoke();
});
...
}
Теперь это отлично работает при запуске в Debug от Visual Studio 2015 (с IIS Express). Но, к сожалению, это не работает при непосредственном запуске dotnet run
(с Kestrel) из командной строки. В этом случае мы получаем следующее исключение:
InvalidOperationException: No authentication handler is configured to handle the scheme: Automatic
Той же ошибка возникает, когда мы обеспечиваем текущую ОС Windows принципал вместо доверителя с пользовательским анонимной идентичностью - так каждый раз, когда пользователь автоматический -ally проверки подлинности ...
Итак, почему существует разница между хостингом в IIS Express и Kestrel? Любые предложения по решению проблемы?
Эта часть кода отлично работает с пустельгой (dotnet run) для меня. Кажется, причина исключения не связана с этим кодом. –
Черт ... Я просто перезагрузился, и теперь все работает нормально. Я не знаю, что случилось ... старые добрые Windows, боюсь (если это не хорошо - перезагрузитесь!). – Matthias
Привет. У меня такая же проблема. Не в Windows, а в докере тоже. Версия - Core 1.0. Я исследовал проблему и увидел, что context.Authentication.HttpAuthhenticationFeature.Handler имеет значение NULL, когда вы используете Kestrel, а не null при использовании IIS. Я предполагаю, что трюк находится в .UseIISIntegration() в Program.cs – aligin