Я пытался реализовать «PwdLess» как простой механизм аутентификации без пароля для моего приложения ASP.Net Core 2.2. Он успешно генерирует JWT, которые я пытаюсь использовать в бэкэнд-API своего приложения, при этом JWT передается через Authorization: Bearer <token>.
В моем методе Startup.ConfigureServices у меня есть следующий код:
// JWT authentication
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "MYISSUERSTRINGHERE"
ValidAudience = "MYAUDIENCESTRINGHERE"
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes("MYSECRETHERE"))
};
});
// ASP.NET Core MVC
services.AddMvc();
В контроллере для метода, к которому я хочу разрешить доступ, у меня есть:
[Authorize]
public IActionResult SomeMethod()
{
}
Это выдает 401, что сбивает с толку... Тем более, что если вместо этого я использую следующий код в своем контроллере, все работает так, как ожидалось:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public IActionResult ValidateToken()
{
}
Я не понимаю, чего мне не хватает в моем Startup.ConfigureServices, что делает значение AuthenticationSchemes необходимым для моего атрибута Authorize!
Пожалуйста, не могли бы вы пролить свет на ошибочность моего пути?
Точно! Добавлен UseAuthentication(), и теперь он работает как шарм, спасибо. Пожалуйста, опубликуйте это как ответ, и я отдам ему должное.





Согласно приведенным выше комментариям, помимо служб аутентификации, нам также необходимо включить промежуточное ПО Authentication перед UseMvc() (а также любые другие промежуточные ПО, которые хотят получить доступ к HttpContext.User):
app.UseAuthentication();
app.UseMvc();
Вы включили промежуточное ПО
UseAuthentication()передUseMvc()?