Предварительный просмотр ASP.NET Core 2.0 1: настройка аутентификации cookie с настраиваемым логином

В ASP.NET Core 2.0 промежуточное ПО .UseAuthentication() имеет прерывистое изменение, которое больше не позволяет использовать старый синтаксис

Любая помощь будет оценена...

Ответ 1

Обновлено, так как это немного изменилось в битах версии 2.0 RTM

Оказывается, это намного проще, чем ожидалось, но поскольку официальная документация еще не обновлена, вот что именно работает для обычного файла cookie:

Конфигурация:

В ConfigureServices() настройте конкретный механизм проверки подлинности:

services
    .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(o =>
    {
        o.LoginPath = "/api/login";
        o.LogoutPath = "/api/logout";
        // additional config options here
    });

Затем в Configure() на самом деле подключить промежуточное ПО:

app.UseAuthentication();

Использование компонентов Auth

Затем, чтобы использовать фактические компоненты Auth, логика переместилась из объекта HttpContext.Authentication, вплоть до всего HttpContext в логике приложения, например, в коде контроллера:

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
            new ClaimsPrincipal(identity));

или

await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

Ответ 2

Приведенный вами пример, похоже, не является реальным кодом (т.е. new CookieAuthenticationOptions() внутри вызова AddAuthentication, а не как аргумент AddCookieAuthentication). Вы не добавляете авторизации внутри вызова AddAuthorization, вы просто устанавливаете здесь стандарты middlewares, см. это объявление.

Старый:

services.AddAuthentication(sharedOptions => 
       sharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
   AutomaticChallenge = true,
   AutomaticAuthenticate = true,

Новое:

app.AddAuthentication(o => {
   o.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
   o.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
   o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});

И

services.AddXxxAuthentication(new XxxOptions() { ... });

заменяются на

services.AddXxxAuthentication(options => {
});

чтобы быть встроенным со всеми другими методами, которые принимают конфигурацию.

Также всегда стоит взглянуть на ASP.NET Core Announcements Репозиторий GitHub, где основная команда ASP.NET объявляет о нарушениях для следующего версии, просто выберите конкретную веху там, то есть 2.0.0-preview1, 2.0.0-preview2 и т.д.