如何为控制器中的所有操作创建包装器/中间件以解密传入的请求

时间:2019-07-14 16:03:45

标签: encryption .net-core asp.net-core-2.0

包装器的原因是解密来自客户端的所有传入请求,进行了加密/解密,以使Net Core Api变得不容易使用。我不喜欢每个人都可以访问我的Net Core API并看到许多尝试来解析我的数据的事实。

因此,我决定仅创建一个控制器,该控制器以Controller和Action的名称接收加密的GET / POST请求。解密/加密逻辑工作正常,但是问题是我需要始终为根控制器创建一个新条件,以标识传递的动作和控制器名称

请问是否可以创建包装器
1)捕捉请求
2)解密其请求对象
3)将请求传递给它所属的动作/控制器

提供更多详细信息:

这是我的RootController,具有一个Process动作(与客户端的所有交互都是通过此root控制器完成的,其余的控制器仅适用于管理员)

[HttpPost]
[Route("")]
public ActionResult Process([FromBody] RootRequest request)
{
    //Here I am checking what controller and actions was 
    if (request.c.ToLower() == "news" && request.a.ToLower() == "getnews")
    {
        var newsCtrl = new NewsController();
        var decrypted = DecryptRequest(request.r);
        var reqObject = (NewsRequest)decrypted;
        //return this.RedirectToAction<NewsController>(m => m.GetNews());
        return newsCtrl.GetNews(reqObject);
    }
}

这是我的请求对象:

public class RootRequest {
    // Endpoint
    public string a { get; set; }
    // Contoller
    public string c { get; set; }
    // Request
    public object r { get; set; }
    // Key
    public string k { get; set; }
}

我要避免创建这种检查:

if (request.c.ToLower() == "news" && request.a.ToLower() == "getnews")

并创建一个中间包装器,该包装器只能解密请求并进一步传递请求

1 个答案:

答案 0 :(得分:1)

您正在做的是创建编码梦night。随着它的增长,这将变得难以管理。解决此问题的正确方法是使用某种身份验证(JWT),以防止未经授权的访问。您不想只是为了防止访问而遮盖有效消费者的数据。请看一下有关JWT的更多详细信息:https://jasonwatmore.com/post/2018/08/14/aspnet-core-21-jwt-authentication-tutorial-with-example-api