如何保护WebAPI应用程序/ HTML+JS客户端



我花了一周的时间在SO和有关身份验证的书籍上,并开始为我的WebAPI推出基本身份验证,以便HTML 客户端可以让用户登录/注册/注销,但是基本身份验证不方便注销,所以我又回到了起点。

细节:

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

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

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

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

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

  6. 这是为了原型设计,所以我不需要最好的解决方案,只需要一些足够好的预发布和执行时间较短的东西。

我应该从哪里开始?你会怎么做,为什么?表单验证是一个选项吗?

在问题中

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

在你回答的评论中

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

不知道你到底在找什么,但表单认证绝对是一个选项。您也可以使用基本身份验证,但它有一些缺点,如您提到的:不能注销等。您必须使用具有基本身份验证的HTTPS。

如果浏览器弹出是主要问题,您可以通过在第一个请求中先发制人地发送凭据来解决这个问题。通常,第一个请求不带Authorization请求头。服务以401响应,并发送返回表示基本方案的WWW-Authenticate响应头。此时,浏览器弹出对话框,询问用户id和密码,将其打包到基本方案中,并发送授权头。

首先也是更重要的;SSL, SSLSSL这是一个非常简单的步骤,即使是主要网站都遗漏了,但它非常重要(即使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/?看= 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 (how-to/with code)

相关内容

最新更新