如何保护Web API应用程序/ HTML + JS客户端?

时间:2013-04-12 19:47:15

标签: .net asp.net-mvc security authentication asp.net-web-api

过去一周我在SO和书籍上阅读了有关身份验证的知识,并开始为我的WebAPI推出基本身份验证,以便HTML 客户端可以让用户登录/ register / logout,但Basic Auth不便于退出,所以我回到了第一个方向。

详细信息:

  1. 我不需要让用户使用其他服务登录。我不需要Facebook或谷歌登录。只是一个用户名/密码。

  2. 我需要用户能够从客户端应用程序(而不是浏览器)登录/注销/注册。

  3. 我不介意通过网络发送凭据,因为我将使用SSL。

  4. 目前只有一个客户端,但会有其他客户端访问API,所以我需要在将来实现类似于api密钥的东西。也许这是一个单独的问题。

  5. 我有一个RESTish WebAPI接受/返回JSON到其他域中的html / js客户端。

  6. 这是用于原型设计的,所以我不需要最好的解决方案,只需要预先发布并且实施时间短的东西。

  7. 我应该从哪里开始?你会做什么,为什么? Forms Auth是一个选项吗?

2 个答案:

答案 0 :(得分:2)

在您提出的问题中

  

我不介意通过网络发送凭据,因为我将使用SSL。

在你所说答案的评论中

  

我只是不希望用户通过网络发送明文密码。

不确定您究竟在寻找什么,但表单身份验证绝对是一种选择。您也可以使用基本身份验证,但它有一些缺点,如您所提到的:没有注销等。您必须使用HTTPS进行基本身份验证。

如果主要关注浏览器弹出窗口,您可以通过在第一个请求中抢先发送凭据来绕过它。通常,第一个请求没有授权请求标头。服务以401响应并发回WWW-Authenticate响应头,指示基本方案。这是当浏览器弹出对话框并询问用户ID和密码时,将其打包在基本方案中并发送授权标题。

答案 1 :(得分:0)

首先,更重要的是; SSL,SSL SSL 这是一个非常简单的步骤,即使是主要网站也会错过,但它很重要(即使目前很多SSL很难利用这些漏洞)。

您可以使用webapi进行几乎任何类型的身份验证;基本认证;证书;你可以看一下使用OAUTH样式的身份验证(注意我说样式,因为规范是如此松散定义,它提供了非常多的选择和多种实现方式)。

首先,我会将WebApi视为一种选择;你考虑过别的吗?例如http://www.servicestack.net/,其中包含一整套身份验证适配器https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization

其次,了解您的身份验证以及身份验证的内容(私有数据/上传/访问某些内容)会很有帮助;为了得到一个包含“足够安全”的答案。

可以使用表单身份验证,并假设您的客户端不是基于浏览器的,您可以通过返回通过服务登录并使用formsauthentication令牌进行响应来实现此目的,您需要在某段时间内保留某些上下文使用;假设在软件使用完api后设置了超时,则用户下次需要再次登录才能重新使用它。


就web api / JS-Html前端而言;引用自己。

  

作为一个JS应用程序,它可能值得快速浏览一下owasp   与JS相关的前10名

     

http://erlend.oftedal.no/blog/?blogid=125

A1 - Injection
A2 - Cross Site Scripting (XSS)
A3 - Broken Authentication and Session Management
A4 - Insecure Direct Object References
A5 - Cross Site Request Forgery (CSRF)
A6 - Security Misconfiguration
A7 - Insecure Cryptographic Storage
A8 - Failure to Restrict URL Access
A9 - Insufficient Transport Layer Protection
A10 - Unvalidated Redirects and Forwards

这里有关于为WebApi创建自定义授权过滤器的好帖子http://www.west-wind.com/weblog/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter(操作方法/代码)