我应该如何保护我的SPA和Web.API



我必须实现一个网站(MVC4/单页应用程序+ knockout + web . api),我一直在阅读大量的文章和论坛,但我仍然不能弄清楚安全/身份验证的一些点,以及在保护登录页面和web . api时前进的方式。

网站将完全在SSL下运行。一旦用户第一次登录,他/她将收到一封带有链接的电子邮件,以确认注册过程。密码和"salt"值将被加密存储在数据库中,不可能将密码解密回来。该API将仅用于此应用程序。

在进一步讨论之前,我有几个问题需要回答:

  1. 就安全性而言,哪种方法最适合我的应用程序:基本/简单会员?还有其他可能吗?
  2. 对象Principal/IPrincipal仅与基本身份验证一起使用?
  3. 据我所知,如果我使用simplemember,因为使用cookie,这不是打破RESTful范式吗?所以如果我建立一个REST Web。API,我不应该避免使用simplememmembership吗?
  4. 我正在检查thinkture。IdentityModel,带令牌。这是一种类似于Basic, Forms或Auth的身份验证类型,还是可以添加到其他身份验证类型中?

谢谢。

这个问题很可能会因为太本地化而被关闭。即便如此,我还是会提出一些建议。这不是一个答案,但是评论部分太小了。

    采用什么方法以及如何进行身份验证完全取决于您的子系统。没有一种方法对每个人都有效。SPA与其他应用程序没有什么不同。您仍将根据身份验证授予对某些资源的访问权。它可以是api,带有自定义授权属性,可以是标头值,基于令牌,谁知道呢!
  1. 我建议你多读一点,了解它是如何工作的。
  2. 使用cookie绝不意味着它破坏了REST。你会发现很多关于这个特定项目的文章。cookie将随您的请求一起传递,就像您传递服务器需要的任何特定信息以便向您提供数据一样。如果发送cookie会破坏REST,那么向API发送参数也会破坏REST !
  3. 现在,一种非常常见的方法(绝不是万能的方法)是使用基于令牌的SPA系统。原因虽然很多,但最容易解释的是,您的服务(Web API或其他)可以单独托管,而您的客户端作为CORS客户端工作。在这种情况下,以您选择的任何形式进行身份验证,创建安全令牌并将其发送回客户机,并且根据令牌检查需要经过身份验证的用户的每个资源。令牌将作为您的每个请求头的一部分发送。没有令牌会导致简单的401(未授权),或者无效令牌会导致403(禁止)。

没有人说SPA需要是所有静态HTML,数据绑定,它也可以是你的MVC站点返回部分正在加载(我过去做过的事情)。只要使用HTML和JS(特别是Durandal),就有办法保护客户端应用程序。最终,锁定来自服务器的数据,并在收到401/403的那一刻将客户端路由到登录屏幕。

如果你更关心XSS或请求伪造,有很多方法可以防止这种情况,即使只有HTML和JS(尽管不像MVC那样容易放弃防伪造令牌)。

我的两分钱

如果您使用"直接"身份验证-这意味着您可以直接验证密码-您可以使用基本身份验证。

我写在这里:http://leastprivilege.com/2013/04/22/web-api-security-basic-authentication-with-thinktecture-identitymodel-authenticationhandler/

此外,你可以考虑使用会话令牌来摆脱客户端的密码:http://leastprivilege.com/2012/06/19/session-token-support-for-asp-net-web-api/

最新更新