【发布时间】:2019-09-08 23:49:07
【问题描述】:
我正在使用存储不同配置的选项模式,包括不同环境的 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 验证。
【问题讨论】:
标签: asp.net-core dependency-injection authorization asp.net-core-webapi