Я создал новый проект ASP.NET Core Web Application в VS17, используя шаблон "Web Application (Model-View-Controller)" и ".Net Framework" + "ASP.NET Core 2" в качестве конфигурации. Конфигурация аутентификации установлена на "Индивидуальные учетные записи пользователей".
У меня есть следующая конечная точка образца:
[Produces("application/json")]
[Route("api/price")]
[Authorize(Roles = "PriceViwer", AuthenticationSchemes = "Cookies,Bearer")]
public class PriceController : Controller
{
public IActionResult Get()
{
return Ok(new Dictionary<string, string> { {"Galleon/Pound",
"999.999" } );
}
}
"Cookies,Bearer"
получают путем объединения CookieAuthenticationDefaults.AuthenticationScheme
и JwtBearerDefaults.AuthenticationScheme
.
Цель состоит в том, чтобы иметь возможность настроить авторизацию для конечной точки так, чтобы она могла получить к ней доступ, используя методы аутентификации как с помощью токена, так и с помощью cookie.
Вот настройки, которые я имею для Аутентификации в моем Startup.cs:
services.AddAuthentication()
.AddCookie(cfg => { cfg.SlidingExpiration = true;})
.AddJwtBearer(cfg => {
cfg.RequireHttpsMetadata = false;
cfg.SaveToken = true;
cfg.TokenValidationParameters = new TokenValidationParameters() {
ValidIssuer = Configuration["Tokens:Issuer"],
ValidAudience = Configuration["Tokens:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"]))
};
});
Поэтому, когда я пытаюсь получить доступ к конечной точке с помощью браузера, я получаю ответ 401 с пустой HTML-страницей.
Затем я вхожу в систему, и когда я снова пытаюсь получить доступ к конечной точке, я получаю тот же ответ.
Затем я пытаюсь получить доступ к конечной точке, указав токен на предъявителя. И это возвращает желаемый результат с ответом 200.
Итак, если я удаляю [Authorize(AuthenticationSchemes = "Cookies,Bearer")]
, ситуация становится противоположной - проверка подлинности cookie работает и возвращает 200, однако тот же метод маркера носителя, который использовался выше, не дает никаких результатов и просто перенаправляет на страницу входа по умолчанию AspIdentity.
Я вижу две возможные проблемы здесь:
1) ASP.NET Core не допускает "комбинированную" аутентификацию. 2) "Cookies" не является допустимым именем схемы. Но тогда что правильно использовать?
Пожалуйста, порекомендуйте. Спасибо.