Использование токенов-носителей и аутентификация файлов cookie вместе
У меня есть одностраничное приложение - более или менее на основе шаблона SPA MVC5 - с помощью токенов-носителей для аутентификации.
На сайте также есть несколько обычных страниц MVC, которые необходимо защитить, но используя аутентификацию cookie.
В Startup.Auth я могу включить оба типа авторизации:
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOAuthBearerTokens(OAuthOptions);
Однако это похоже на побочный эффект в том, что всякий раз, когда запрос AJAX отправляется из SPA, он отправляет токен-носитель в заголовок и cookie.
В то время как поведение, которое я действительно хочу, состоит в том, что только токен-носитель используется для вызовов WebAPI и только cookie для вызовов MVC.
Мне также нравятся вызовы MVC для перенаправления на страницу входа в систему, если они не авторизованы (установлены как CookieAuthenticationOption), но, очевидно, я не хочу, чтобы это происходило при вызове API.
Есть ли какой-нибудь способ аутентификации смешанного режима в одном приложении? Возможно, через фильтр пути/маршрута?
Ответы
Ответ 1
Думаю, я справился с этим: -
Startup.Auth подключает конвейер OWIN, поэтому есть право включать в него Cookies и токены. Но одно изменение параметров cookie указывает тип аутентификации, к которому он должен относиться:
CookieOptions = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie
};
Затем мне нужно было настроить WebAPI только для использования токенов:
public static void Configure(HttpConfiguration config)
{
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
}
Это, кажется, достигает того, чего я хочу. WebAPI использует только токены-носители и файлы cookie, а некоторые обычные страницы MVC используют файлы cookie после входа в систему (используя AuthenticationManager).