Mam działający projekt Netcore 2.2, w którym zaimplementowałem niestandardowe zasady sprawdzające klucze API.
W startup.cs dodaję tę zasadę w ten sposób
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
W moim AppKeyRequirement dziedziczę po AuthorizationHandler i rozwiązuję klucze w przychodzących żądaniach w ten sposób
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
To nie działa w Netcore 3.1
Otrzymuję następujący błąd:
Nie można rzutować obiektu typu „Microsoft.AspNetCore.Routing.RouteEndpoint”, aby wpisać „Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext”.
Jak to zrobić w rdzeniu 3 i nowszych?
Jak zauważył Kirk Larkin, poprawnym sposobem w .net 3.0 i nowszych jest wstrzyknięcie IHttpContextAccessor do modułu obsługi autoryzacji i użycie go.
Moje pytanie w tym momencie brzmi: jak to wstrzyknąć? Nie mogę przekazać tego w startup.cs lub przynajmniej nie widzę jak.
Wszelkie pomysły / wskazówki będą mile widziane.
źródło
IHttpContextAccessor
. Zobacz dokumenty .