Asp.net 如何保护API

Asp.net 如何保护API,asp.net,json,ssl,Asp.net,Json,Ssl,我正在开发一个API,作为Windows应用程序和数据库之间的中间人。Web服务器将只是一个ASP。NET通用处理程序返回json。 用户将登录应用程序,其凭证将通过网络传输。从那时起,我要做的是生成一个会话密钥,从那时起,应用程序可以在每个请求中使用该密钥。 在可预见的未来,这将不是一个开放的API。 现在我想知道的是,这是否足够安全?我如何阻止人们使用fiddler来复制呼叫? 有没有更好的方法?如果我使用SSL会有帮助吗 我不想使用oauth使事情复杂化 谢谢 使用SSL。为了获得会话令牌

我正在开发一个API,作为Windows应用程序和数据库之间的中间人。Web服务器将只是一个ASP。NET通用处理程序返回json。 用户将登录应用程序,其凭证将通过网络传输。从那时起,我要做的是生成一个会话密钥,从那时起,应用程序可以在每个请求中使用该密钥。 在可预见的未来,这将不是一个开放的API。 现在我想知道的是,这是否足够安全?我如何阻止人们使用fiddler来复制呼叫? 有没有更好的方法?如果我使用SSL会有帮助吗

我不想使用oauth使事情复杂化


谢谢

使用SSL。为了获得会话令牌,客户端应该使用通过SSL传输的用户名和密码对自己进行身份验证。一旦通过身份验证,令牌应通过SSL传输到服务器,以防止中间人攻击

下面是流程图:

  • 客户端通过SSL将其凭据(用户名和密码)发送到web方法
  • web方法验证凭据并生成会话令牌,并将该会话令牌返回给客户端
  • 客户端在后续请求时向受保护的资源发送会话令牌
  • 服务器验证令牌,并验证令牌是否有效,以授予对受保护资源的访问权
  • 您可以使用simple生成会话令牌。这些方法和步骤对您来说可能是一个良好的开端。表单身份验证令牌包含当前已验证用户的加密值。如果您在web场中运行,请确保web场的所有节点上都有static,否则在一个节点上加密的会话令牌可能无法在另一个节点上解密


    作为可通过SSL使用的会话令牌的替代方案。缺点是每次请求时凭证都通过网络发送。即使您使用的是SSL,密码仍然是通过网络传输的,因此这种方法不如会话令牌安全,但更易于设置。

    感谢您提供的详细答案!但有一个问题是我无法控制数据库。我将连接到现有的MySQL数据库,无法更改模式。现在就我所记得的(我已经离开ASP开发很久了),要实现ASP.NET forms auth,您需要使用它们的模式或编写自定义实现。后者将再次使其过于复杂化。仅仅用我自己的方式创建会话密钥有什么问题吗?就像散列用户名和其他变量一样?@Matt,表单身份验证与任何数据库或模式都没有任何关系。您似乎混淆了表单身份验证和成员资格提供程序,这是两个完全不同的概念。你可以很好地使用有会员资格和无会员资格的FA。因此,在您的情况下,您需要做的就是对照您的数据库检查用户名和密码(无论该数据库是什么),然后调用Encrypt方法生成密钥,并以cookie或自定义头的形式返回给用户。散列用户名在您的情况下没有任何用处,因为。。。。。。散列是一个不可逆的过程。这意味着,如果你给用户这个散列,他随后在另一个请求中发送给你,你就无法知道谁是用户,除非你已经将这些散列存储在数据库中。另一方面,FA是无状态的。它使用加密(不是散列)。你完全正确。我把两者混淆了,你的帖子现在完全讲得通了。谢谢你的帮助!