代码之家  ›  专栏  ›  技术社区  ›  Fede Antuña

C#-将数据传递给JS并等待结果处理

  •  2
  • Fede Antuña  · 技术社区  · 7 年前

    有没有从C#向JS传递一些东西,然后在JS中执行一些操作并将其返回给C#代码?

    我正在开发MVC,我试图在发送之前加密视图中的密码,这样就没有人可以偷看了。我的想法是:

    1. 点击submit时,AJAX调用会要求服务器生成新的RSA密钥对
    2. 服务器生成新的密钥对,并将公钥发送给客户端,等待响应
    3. 客户端接收公钥,在js文件中加密密码,并将加密密码发送到服务器
    4. 服务器接收其等待的数据并解密密码

    我认为这是做这件事的“最佳”方式,但我不知道是否可以用Ajax启动一个线程,然后让它等待,直到它收到响应,或者在x时间后死亡。我认为这是最好的方法,因为每次你需要提交密码时,它都会生成一个唯一的密钥对,并且永远不会被存储。因此,如果有人根据你发送的请求进行选择,他们会得到一个加密的密码,不能白用。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Dominik Szymański    7 年前

    你的问题格式不正确。您不希望服务器向客户端发送任何内容,而是希望客户端向服务器发送一些内容。 就像你的场景一样,这看起来很好:

    1. 客户端要求服务器:给我公钥
    2. 服务器响应:这是您需要的密钥和ID,我可以选择私钥
    3. 客户端加密,服务器不关心这里发生了什么。
    4. 客户端发送到服务器:这是您之前给我的加密密码和ID。
    5. 服务器为给定的密钥ID查找其密钥缓存
    6. 服务器使用从缓存中检索的私钥解密密码,客户端等待响应。
    7. 服务器响应:密码正常或密码错误,或者如果找不到提供的ID,则应返回一些超时或其他错误。

    当然,如果您想动态地生成RSA密钥,那么您需要为每个请求随机地保存要解密的密钥和一些会话密钥(客户端也会知道),这样您就可以将它们匹配起来,但它应该可以工作。

    内置。NET内存缓存似乎完美地设计了此任务。您可以将数据放入缓存、检索、删除并设置有效期,然后设置有效期。NET管理自己从缓存中删除对象。
    请参阅。可用的NET文档: https://msdn.microsoft.com/pl-pl/library/system.runtime.caching.memorycache(v=vs.110).aspx 在这件事上。

    可以在Ajax中创建请求并使其等待完成或超时,但您必须记住,服务器无法联系客户机,除非客户机请求联系(发送请求)或您正在使用WebSocket(我认为,对于此任务,WebSocket就像杀苍蝇的大炮)。