Я использую шаблон параметров, в котором хранятся различные конфигурации, в том числе ключи API для различных сред. До сих пор я использовал это нормально и вводил свои значения в классы по мере необходимости.
Однако я столкнулся с небольшой проблемой, пытаясь настроить авторизацию в контроллере и выполнить проверку для моего ApiKey, уникального для среды, потому что я не смог внедрить IOptions в класс ApiKeyAuthorizeAttribute для выполнения проверки.
Вот как теперь выглядит мой контроллер:
[ApiKeyAuthorize]
public class NotificationSettingsController : Controller
{
//some endpoints here
}
ApiKeyAuthorize Класс:
public class ApiKeyAuthorizeAttribute : Attribute, IAuthorizationFilter
{
//////This...
private readonly IOptions<MyConfig> _config;
public ApiKeyAuthorizeAttribute(IOptions<MyConfig> config)
{
_config = config;
}
/////////...is what I am trying to accomplish
public void OnAuthorization(AuthorizationFilterContext context)
{
var request = context.HttpContext.Request;
var foundApiKeys = request.Headers.TryGetValue("ReplaceWithOptionsApiKeyName", out var requestApiKeys);
if (!foundApiKeys || requestApiKeys[0] != "ReplaceWithOptionsApiKeyValue")
{
context.Result = new UnauthorizedResult();
}
}
}
Моя проблема в том, что инъекция здесь невозможна, но мне нужно получить значение из IOptions <> для запуска проверки ApiKey.