Я использую промежуточное ПО для проверки токена для аутентификации пользователя, который подключается к другому серверу для этого. Но проблема в том, что он всегда проверяет токен, даже если он не требуется, то есть при использовании Register API или любого другого, который не нуждается в проверке.
Это мой файл TokenValidationMiddleware.cs.
public async Task Invoke(HttpContext httpContext, UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
// **>>>>>BELOW CHECK IS MANUAL, WHICH IS ALSO NOT CORRECT.<<<<<**
if (!httpContext.Request.Path.StartsWithSegments("/api/Authentication/Login") && !httpContext.Request.Path.StartsWithSegments("/api/Authentication/Refresh"))
{
var headerKeys = httpContext.Request.Headers.Keys;
// **issue comes here**
// **it always discard the request which does not have any token.**
if (headerKeys.Contains("Authorization"))
{
// validation code, which hits another server.
}
else
{
httpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
await httpContext.Response.WriteAsync("Unauthorized Access");
return;
}
}
await _next.Invoke(httpContext);
}
Это промежуточное ПО всегда проверяет проверку токена для каждого поданного запроса.
Я хочу обойти это промежуточное ПО для анонимных запросов или запросов, которые не имеют атрибута [Authorize] над контроллером или указаны c конечная точка.
Одним из решений является сохранение где-нибудь всех анонимных конечных точек и проверка промежуточного программного обеспечения, что совсем не правильно.
Другое - изменение маршрутов всех безопасных конечные точки называются «api / secure / [controller]», но для этого мне нужно изменить все конечные точки в бэкенде, а также во внешнем интерфейсе. Это тоже не очень хороший подход.
Пожалуйста, предложите решение для этого.
Заранее спасибо.