1

我正在开发一个 asp.net mvc-4 Web 应用程序,并且我已经开始实施一些 Web 服务,这些服务提供有关我的站点的统计信息。但是为了确保只有经过授权和身份验证的消费者才能调用和使用 Web 服务,我正在考虑为每个消费者定义一个主登录用户名和密码,当消费者发送 Web 服务请求时,他应该包括这些主登录用户名和密码(存储为哈希值)在 Web 服务调用中。

例如,从我的网站调用特定 Web 服务的 Web 服务链接如下所示:-

/web/json/statistic/getsummaryinfo/areacode?j_username=masterusername&hash=D012B772672A55A0B561EAA53CA7734E

所以我的问题是我所遵循的方法是否会为我的 Web 服务和消费者提供安全的解决方案?或者我的方法有我不知道的安全漏洞?

:::已编辑::

我正在使用 WebAPI 控制器在我的 asp.net mvc-4 中实现 Web 服务。**

此致

4

2 回答 2

3

有几种方法可以确保事情是安全的。

  1. http://techcrunch.com/2012/11/08/soa-softwares-api-management-platform-and-how-it-compares-to-its-sexy-counterparts/这篇文章今天刚出来,重点介绍了一些 API 工具. 我不确定你有多大或计划有多大,但如果你正在寻找规模,这些工具似乎很受欢迎(注意:我自己没有大型 API 项目,所以我没有t 使用这些)。
  2. 您可以使用 ServiceStack 之类的东西来构建您的 API 层。它具有内置的授权和身份验证,其中包含大量身份验证提供程序。它可以很好地扩展,并且在调用身份验证之后是基于会话的,因此您不必对每个调用进行身份验证。
  3. 您可以使用“签名”请求。签名请求通常看起来像这样:“将请求的所有参数作为查询字符串,在请求的末尾附加一个‘秘密消费者密钥’,然后通过附加结果的 md5 哈希来对请求进行签名(没有密钥!!)请求。” 这是一种安全的做事方式,因为即使请求是在客户端 (AJAX) 发出的,它也是使用密钥在服务器端生成的。所以你可以确保事情没有被篡改。
  4. 你可以走 oauth/token 路线(通常仍然使用上面的方法#3)。
  5. 您可以使用可以撤销的简单 API 密钥(同样,fotne 与方法 #3 一起使用)。bit.ly 使用我认为的这种方法。

选项#2是我最喜欢的。我喜欢 ServiceStack。但老实说,您的第一个项目的学习曲线可能有点陡峭。

主用户名和散列密码对我来说感觉很弱,所以我强烈考虑至少看看其他人是如何做的。

高温高压

于 2012-11-08T19:34:39.797 回答
0

我不认为你的方式是安全的。如果我可以在线收听并缓存请求,我将获得服务的登录名和密码。密码是否经过哈希处理甚至都没有关系。我喜欢 Eli Gassert 的回答中的第 3 点。这听起来非常有用且重量轻,您不会暴露密码,因为它在请求中的“某处”被散列。

于 2012-11-08T20:28:10.913 回答