J'ai un projet netcore 2.2 fonctionnel où j'ai mis en œuvre une politique personnalisée qui vérifie les clés API.
Dans le startup.cs j'ajoute cette politique comme ceci
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
Dans mon AppKeyRequirement, j'hérite de AuthorizationHandler et résout les clés dans les demandes entrantes comme ceci
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
Cela ne fonctionne pas dans netcore 3.1
Je reçois l'erreur suivante:
Impossible de convertir un objet de type «Microsoft.AspNetCore.Routing.RouteEndpoint» en type «Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext».
Quelle est la bonne façon de procéder dans le noyau 3 et au-dessus?
Comme l'a souligné Kirk Larkin, la bonne façon dans .net 3.0 et supérieur consiste à injecter IHttpContextAccessor dans le gestionnaire Auth et à l'utiliser.
Ma question à ce stade est de savoir comment injecter cela? Je ne peux pas passer cela dans startup.cs ou au moins je ne vois pas comment.
Toutes les idées / conseils seront très appréciés.
la source
IHttpContextAccessor
. Voir les documents .