Skip to main content
 首页 » 编程设计

c#之加密 web api 请求正文内容并在服务器上解密

2024年02月05日37Renyi-Fan

我希望创建一个简单的安全解决方案,通过使用 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());