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