Ich habe ein funktionierendes Netcore 2.2-Projekt, in dem ich eine benutzerdefinierte Richtlinie implementiert habe, die nach API-Schlüsseln sucht.
In der Datei startup.cs füge ich diese Richtlinie folgendermaßen hinzu
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
In meiner AppKeyRequirement erbe ich von AuthorizationHandler und löse die Schlüssel in den eingehenden Anforderungen wie folgt auf
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
Dies funktioniert in Netcore 3.1 nicht
Ich erhalte die folgende Fehlermeldung:
Objekt vom Typ 'Microsoft.AspNetCore.Routing.RouteEndpoint' kann nicht in Typ 'Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext' umgewandelt werden.
Was ist der richtige Weg, um dies in Kern 3 und höher zu tun?
Wie von Kirk Larkin hervorgehoben, besteht der richtige Weg in .net 3.0 und höher darin, IHttpContextAccessor in den Auth-Handler zu injizieren und diesen zu verwenden.
Meine Frage an dieser Stelle ist, wie ich das injiziere. Ich kann dies nicht in startup.cs übergeben oder zumindest sehe ich nicht wie.
Alle Ideen / Hinweise werden sehr geschätzt.
quelle
IHttpContextAccessor
. Siehe die Dokumente .