Asp.net mvc 在实现web服务时使用主登录用户名和密码是否被认为是安全的

Asp.net mvc 在实现web服务时使用主登录用户名和密码是否被认为是安全的,asp.net-mvc,asp.net-mvc-3,web-services,security,Asp.net Mvc,Asp.net Mvc 3,Web Services,Security,我正在开发一个asp.NETMVC-4Web应用程序,并且我已经开始实现一些web服务,这些服务提供有关我的站点的统计信息。但为了确保只有经过授权和验证的使用者才能调用和使用web服务,我考虑为每个使用者定义一个主登录用户名和密码,当使用者发送web服务请求时,他应该在web服务调用中包含这些主登录用户名和密码(存储为哈希值) 例如,从我的网站调用特定web服务的web服务链接如下所示:- /web/json/statistic/getsummaryinfo/areacode?j_usernam

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

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

/web/json/statistic/getsummaryinfo/areacode?j_username=masterusername&hash=D012B772672A55A0B561EAA53CA7734E
所以我的问题是,我所采用的方法是否能为我的web服务和消费者提供安全的解决方案?或者我的方法存在我不知道的安全漏洞?

::编辑::

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


致以最诚挚的问候

有几种方法可以确保一切安全

  • 这篇文章今天刚刚发表,重点介绍了一些API工具。我不确定您的规模有多大或计划有多大,但如果您想扩大规模,这些工具似乎非常流行(注意:我自己没有大型API项目,所以我没有使用过这些工具)
  • 您可以使用类似ServiceStack的东西来构建API层。它具有内置的授权和身份验证,以及大量的身份验证提供者。它可以很好地扩展,并且在调用身份验证后,它是基于会话的,因此您不必对每个调用进行身份验证
  • 您可以使用“签名”请求。已签名的请求通常类似于:“将请求的所有参数作为查询字符串,在请求末尾附加一个‘secret consumer key’,然后通过将结果的md5哈希值(不带secret key!!)附加到请求来对请求进行签名。”这是一种安全的方法,因为即使请求是在客户端(AJAX)发出的,它也是使用密钥在服务器端生成的。所以你可以确保事情没有被篡改
  • 您可以使用oauth/令牌路由(通常仍然使用上面的方法#3)
  • 您可以使用一个可以撤销的简单API密钥(同样,与方法#3一起使用)。我认为bit.ly使用这种方法
  • 选项2是我最喜欢的。我喜欢ServiceStack。但老实说,你第一个项目的学习曲线可能有点陡峭

    一个主用户名和哈希密码对我来说很弱,所以我会强烈考虑至少看看别人是怎么做的。


    我不认为你的方法是安全的。如果我可以在网上监听并缓存请求,我将拥有服务的登录名和密码。密码是否被散列也没有关系。我喜欢第三点。在Eli Gassert的回答中。它听起来非常有用,而且重量很轻,您不会公开密码,因为它在请求中的“某处”散列了

    谢谢你的回复,只是补充我原来的问题;我不需要其他工具来构建web服务,因为我正在使用webapi控制器在我的asp.net、vc-4 web应用程序中实现web服务。但是,如果我使用https,那么我的方法会是安全的吗?只有当数据在网络上传输时,外人才能偷看数据。如果任何人“看到”其他任何人的请求(预传输),将很容易模拟该用户。这些请求是否始终是服务器到服务器的,而从来没有任何面向客户端的远程请求?他们使用自己的用户名和密码与您建议的“主”用户名/密码有什么区别?@Eli Gasset。您提到“他们使用自己的用户名和密码与您建议的“主”用户名/密码有什么区别?”。不同之处在于,我的asp.net向其他应用程序提供web服务,因此我不知道它们的用户名和密码,因此我设置了主登录用户名和密码,以便在每次web服务请求时发送。