Я пытаюсь аутентифицировать пользователей в моем приложении asp.net core 2.2. Вот как мы используем это в веб-интерфейсе asp.net, используя .net 4.5
public class AuthFilter : ActionFilterAttribute, IActionFilter
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//based on certain condition
filterContext.Result = new UnauthorizedResult();
}
}
Я не могу добиться того же в ядре asp.net 2.2. Единственное изменение: Мне нужно реализовать эту логику только для нескольких маршрутов. Так что в основном мне нужно сначала проверить маршрут, а затем аутентифицировать пользователей только для этих роутов . Это то, что я нашел до сих пор:
public class CustomAuthenticationSchemeProvider : AuthenticationSchemeProvider
{
private readonly IHttpContextAccessor httpContextAccessor;
public CustomAuthenticationSchemeProvider(
IHttpContextAccessor httpContextAccessor,
IOptions<AuthenticationOptions> options)
: base(options)
{
this.httpContextAccessor = httpContextAccessor;
}
private async Task<AuthenticationScheme> GetRequestSchemeAsync()
{
var request = httpContextAccessor.HttpContext?.Request;
if (request == null)
{
throw new ArgumentNullException("The HTTP request cannot be retrieved.");
}
// For API requests, use authentication tokens.
if (request.Path.StartsWithSegments("/api"))
{
return await GetSchemeAsync(OAuthValidationDefaults.AuthenticationScheme);
}
// For the other requests, return null to let the base methods
// decide what's the best scheme based on the default schemes
// configured in the global authentication options.
return null;
}
}
Я не уверен, как реализовать этот «GetSchemeAsync». Я также не уверен, что я пытаюсь достичь правильного пути или нет