我在Web API 2项目中实现了HMAC身份验证过滤器(根据this article)。本文使用静态密钥进行演示,因此我修改了过滤器,以便使用' AppId'从数据库中查找私有API密钥。 GUID。这很好用,因为我能够为该AppId条目加载适当的帐户。但我想知道是否可以访问"帐户"在我的控制器中的身份验证过滤器类中创建的对象。
这是我宣布对象的方式:
public class HMACAuthenticationAttribute : Attribute, IAuthenticationFilter
{
private static Dictionary<string, string> allowedApps = new Dictionary<string, string>();
public DummyAccount account = new DummyAccount();
}
稍后在代码中:
// Load account and its private API Key
account = accountService.GetByAppId(Guid.Parse(appId), session);
if (account == null)
{
context.ErrorResult = new UnauthorizedResult(new AuthenticationHeaderValue[0], context.Request);
}
// If we find the account, we add to allowedApps the AppId/PrivateKey pair
allowedApps.Add(account.AppId.ToString(), account.ApiKey);
现在在我的WebApi控制器中,代码如下所示:
[HMACAuthentication]
[HttpPost]
public RatingDto Post(SearchTrackDto searchedTrack)
{
// Access 'account' object here?
}
我的期望是我可以以某种方式直接访问帐户对象,因此我不必再次解析请求并进行第二次数据库查询。将对象存储在Request.Context中是否可行?还有什么替代方案?
答案 0 :(得分:0)
您可以尝试实施缓存。 AuthenticationFilter应该验证每个请求,因为上下文生命周期范围与请求死亡一样长。