我希望创建一个简单的安全解决方案,通过使用 Fiddler 或其他工具拦截请求,Web API 主体内容不会简单地显示给所有希望看到的人。我受到限制,因为我不能使用 SSL。我已经实现了 HMAC 类型的身份验证,我想通过在客户端上创建正文内容的加密并将该请求发送到服务器,然后服务器将解密正文并按预期转发操作来更进一步,但是解密。我在服务器端 HMAC 使用过滤器,在客户端使用 delagatingHandler。
我对使用 http 请求不是很熟悉,也不完全理解我如何拦截所有正文内容然后将其加密并放回 httpcontent。
任何想法或帮助将不胜感激。
请您参考如下方法:
为了在 WEB API 中发生模型映射之前解密数据,您可以劫持 AuthorizeAttribute,因为 ActionFilterAttribute 发生在模型映射之后。
我知道 AuthorizeAttribute 是出于另一个原因,但劫持它对我来说非常有效(我想解压缩 zip 内容)。
public class DecryptAttribute : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
actionContext.Request.Content = DecryptContect(actionContext.Request.Content);
}
}
然后用这个属性装饰你所有的 WebAPI Controller 。
为了压缩并嵌入到正文中,我使用了委托(delegate)处理程序
public class EncryptHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>((responseToCompleteTask) =>
{
HttpResponseMessage response = responseToCompleteTask.Result;
response.Content = new EncryptContent(response.Content);
return response;
},
TaskContinuationOptions.OnlyOnRanToCompletion);
}
}
然后注册就可以了
GlobalConfiguration.Configuration.MessageHandlers.Add(new EncryptHandler());
