Ho un progetto netcore 2.2 funzionante in cui ho implementato una politica personalizzata che controlla le chiavi API.
In startup.cs sto aggiungendo questa politica in questo modo
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
Nel mio AppKeyRequirement eredito da AuthorizationHandler e risolvo le chiavi nelle richieste in arrivo in questo modo
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
Questo non funziona in netcore 3.1
Ricevo il seguente errore:
Impossibile eseguire il cast dell'oggetto di tipo "Microsoft.AspNetCore.Routing.RouteEndpoint" per digitare "Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext".
Qual è il modo corretto per farlo nel core 3 e versioni successive?
Come sottolineato da Kirk Larkin, il modo corretto in .net 3.0 e versioni successive è di iniettare IHttpContextAccessor nel gestore Auth e utilizzarlo.
La mia domanda a questo punto è come posso iniettarlo? Non posso passare questo in startup.cs o almeno non vedo come.
Eventuali idee / suggerimenti saranno molto apprezzati.