Eu tenho um projeto netcore 2.2 em funcionamento em que implementei uma política personalizada que verifica as chaves da API.
No startup.cs, estou adicionando esta política como esta
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
No meu AppKeyRequirement, herdo de AuthorizationHandler e resolvo as chaves nas solicitações de entrada 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
Isso não funciona no netcore 3.1
Eu estou recebendo o seguinte erro:
Não foi possível converter o objeto do tipo 'Microsoft.AspNetCore.Routing.RouteEndpoint' para digitar 'Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext'.
Qual é a maneira correta de fazer isso no núcleo 3 e acima?
Conforme apontado por Kirk Larkin, a maneira correta no .net 3.0 e acima é injetar IHttpContextAccessor no manipulador Auth e usá-lo.
A minha pergunta neste momento é como injetar isso? Não posso passar isso no startup.cs ou pelo menos não estou vendo como.
Todas as idéias / sugestões serão muito apreciadas.
fonte
IHttpContextAccessor
. Veja os documentos .