Tengo un proyecto de trabajo en netcore 2.2 en el que he implementado una política personalizada que verifica las claves API.
En startup.cs estoy agregando esta política como esta
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
En mi AppKeyRequirement, heredo de AuthorizationHandler y resuelvo las claves en las solicitudes entrantes como esta
protected override Task HandleRequirementAsync(AuthorizationHandlerContext authContext, AppKeyRequirement requirement)
{
var authorizationFilterContext = (AuthorizationFilterContext)authContext.Resource;
var query = authorizationFilterContext.HttpContext.Request.Query;
if (query.ContainsKey("key") && query.ContainsKey("app"))
{ // Do stuff
Esto no funciona en netcore 3.1
Estoy teniendo el siguiente error:
No se puede emitir el objeto de tipo 'Microsoft.AspNetCore.Routing.RouteEndpoint' para escribir 'Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext'.
¿Cuál es la forma correcta de hacer esto en el núcleo 3 y superior?
Como señaló Kirk Larkin, la forma correcta en .net 3.0 y superior es inyectar IHttpContextAccessor en el controlador Auth y usarlo.
Mi pregunta en este momento es ¿cómo puedo inyectar esto? No puedo pasar esto en startup.cs o al menos no veo cómo.
Cualquier idea / pista será muy apreciada.
fuente
IHttpContextAccessor
. Ver los documentos .