看起来保护 ASP.NET Web API 的解决方案非常分散,所以我决定推出自己的公钥/私钥加密方案。请查看我的工作流程并帮助我回答我最后遇到的问题。(同样,它特定于 .NET 4.0 Web API 框架)
- 用户在我的 Web MVC 4.0 网站上注册。
注册后,我的网站会做 4 件事
a) 为该用户生成一个 RSA服务器公钥
乙)。为该用户生成 RSA服务器私钥
C)。为该用户生成 RSA客户端公钥
d)。为该用户生成 RSA客户端私钥
我将所有 4 个密钥保存到数据库中的该用户帐户,并为用户提供称为“APIKey”的服务器公钥以及称为“SecretKey”的客户端私钥。这是为了将来的握手目的。用户永远不会知道服务器私钥或客户端公钥。
一旦用户确认他们拥有密钥,出于安全目的,我会从我的数据库中删除“客户端私钥”。
用户通过使用RSA服务器公钥(APIKey)提交服务器公钥(或APIKey)+“:”+(用户名,密码)的加密消息开始请求我的WebAPI认证服务
服务器收到 APIKey+":"+ 加密消息,找到私钥,解密消息,获取用户名、密码,并使用 Membership 提供者确保它们是正确的。
如果不正确,则创建拒绝响应。否则,它会为用户找到记录在案的客户端公钥,创建一个唯一的时间敏感会话令牌(在 5 分钟后过期),将其记录在数据库中 + 时间创建,并使用客户端公钥加密令牌并将其发送回给客户。
客户端收到响应,使用它的“客户端私钥”或“密钥”解密响应,获取令牌。
用户通过使用服务器公钥加密以下内容向服务发出其他请求
a) 会话令牌 b) 时间戳(这样我可以确保不会发生重放攻击) c) 数据
并将其 APIKEy+":"+加密消息发送到服务器
我坚持的是第 9 步及以后。
在第 9 步是否有必要仍然使用公钥/私钥进行通信?我问的原因是因为浏览器通过 SSL 与服务器通信,最后,一旦发生握手,他们使用约定的密码套件对称算法来回传递消息,据说它更快?但是,如果我们这样做,从现在开始,它会是安全的吗?
在这种情况下,在我的工作流程中,我可以在我的 Web API 和客户端之间交换此协议以使用相同的对称算法来来回加密/解密信息?
谢谢!!
编辑:如果您在此工作流程中发现缺陷,请告诉我!非常感谢。