После прочтения нескольких статей особенно это
Я создал собственное решение ASP.NET Core, которое имеет
1 проект (AuthServer) для Authentication
и Authorisation
и
1 проект (WebApi) для остальных API во всех моих проектах.
Вопрос:
Как проверить http-запросы в моем проекте WebApi?
Я знаю, что как только пользователь проходит аутентификацию, клиент будет держать токен, и для последующих запросов все они должны передать int Token и на стороне сервера он каким-то образом проверяет эти запросы с помощью этого фрагмента кода, который находится в Startup.cs для проекта AuthServer:
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x=> {
x.Events = new JwtBearerEvents
{
OnTokenValidated = context =>
{
var userService = context.HttpContext.RequestServices.GetRequiredService<IUserService>();
var userId = context.Principal.Identity.Name;
var user = userService.GetById(userId);
if(user == null)
{
context.Fail("Unauthorized");
}
return Task.CompletedTask;
}
};
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters {
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false
};
});
Но что нужно сделать для проекта WebApi, чтобы проверить токен?
Я бы предположил, что это будет не просто размещение аннотации ( [Authorize] ) на контроллере или действия вроде:
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{ ....}
Тогда что мне нужно сделать, чтобы проверить токен в моем проекте WebApi?
Вызывая конечную точку Authenticate в моем AuthServer
проекте каждый раз, когда приходит запрос, а затем выполняю код в WebApi?