Я работаю над требованием, в котором я проверяю, содержит ли наш заголовок запроса заголовок авторизации и на основании этого либо вызывает другой сервер и возвращает 403. В настоящее время я сделал это, создав пользовательский атрибут ActionAttribute следующим образом:
public class ValidateAuthHeaderAttribute: ActionFilterAttribute
{
private readonly ILogger<ValidateAuthHeaderAttribute> _logger;
public ValidateAuthHeaderAttribute(ILogger<ValidateAuthHeaderAttribute> logger)
{
_logger = logger;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
var httpContext = context.HttpContext;
if (httpContext.Request.Headers.ContainsKey("Authorization"))
{
return;
}
var failureResponse = new FailureResponseModel
{
Result = false,
ResultDetails = "Authorization header not present in request",
Uri = httpContext.Request.Path.ToUriComponent(),
Timestamp = DateTime.Now.ToString("s", CultureInfo.InvariantCulture),
Error = new Error
{
Code = 108,
Description = "Authorization header not present in request",
Resolve = "Send Request with authorization header to avoid this error."
}
};
var responseString = JsonConvert.SerializeObject(failureResponse);
context.Result = new ContentResult
{
Content = responseString,
ContentType = "application/json",
StatusCode = 403
};
}
}
И я использую этот пользовательский атрибут в моем контроллере / методах, подобных этому.
[TypeFilter(typeof(ValidateAuthHeaderAttribute))]
Теперь это работает нормально, но я читал об авторизации на основе политик в .Net Core doc . Так как сейчас рекомендуется использовать Политики. Я думал, что можно перенести мой код в пользовательскую политику.