Создайте собственную политику авторизации для этого.
public class HeaderRequirement : IAuthorizationRequirement
{
public HeaderRequirement(string header)
{
Header = header;
}
public string Header { get; }
}
public class HeaderRequirementHandler : AuthorizationHandler<HeaderRequirement>
{
protected override Task HeaderRequirementHandler (
AuthorizationHandlerContext context,
HeaderRequirement requirement)
{
var hasHeader = context.Request.Headers.ContainsKey(requirement.Header);
if (hasHeader) // if we have the header
{
context.Succeed(requirement); // authorization successful
}
return Task.CompletedTask;
}
}
Зарегистрируйте обработчик как сервис
services.AddScoped<IAuthorizationHandler, HeaderRequirementHandler>();
Добавьте политику в сервисы авторизации
services.AddAuthorization(options =>
{
options.AddPolicy("SomeHeader", policy =>
policy.Requirements.Add(new HeaderRequirement("SomeHeader")));
});
Теперь вы можете использовать его следующим образом: [Authorize(Policy = "SomeHeader")]
Если вам нужно немного более динамично, Если вы не хотите регистрировать каждый отдельный заголовок, который может бытьаутентифицируется, но скорее интерпретируется во время выполнения. Вы можете написать свой собственный поставщик политики