我必须实现一个网站(MVC4/单页应用程序+淘汰+Web.API),我已经阅读了大量的文章和论坛,但我仍然无法弄清楚安全/身份验证方面的一些要点,并且保护登录页面和 Web.API 安全的前进方向。
该网站将完全在 SSL 下运行。用户首次登录后,他/她将收到一封电子邮件,其中包含确认注册过程的链接。密码和“盐”值将加密存储在数据库中,不可能解密密码。该 API 将仅用于此应用程序。
我有一些问题需要先回答才能继续:
- 就安全性而言,哪种方法最适合我的应用程序:Basic/SimpleMembership?还有其他可能性吗?
- Principal/IPrincipal 对象只能与基本身份验证一起使用吗?
- 据我所知,如果我使用SimpleMembership,因为使用了cookie,这不是破坏了RESTful范式吗?因此,如果我构建 REST Web.API,我是否应该避免使用 SimpleMembership?
- 我正在使用 token 检查 ThinkTecture.IdentityModel。这是一种类似于 Basic、Forms 或 Auth 的身份验证类型,还是可以添加到其他身份验证类型中?
谢谢。
最佳答案
这个问题很可能会因为过于本地化而被关闭。即便如此,我还是会提出一些建议。这不是一个答案,但评论部分对于这个来说太小了。
- 采用什么方法以及如何进行身份验证完全取决于您的子系统。没有一种方法对每个人都最有效。 SPA 与任何其他应用程序没有什么不同。您仍将根据身份验证授予对某些资源的访问权限。这可能是具有自定义授权属性的 API,也可能是基于 token 的 header 值,谁知道呢!只要你认为最好。
- 我建议您阅读更多相关内容以了解其工作原理。
- 使用 cookie 绝不表明它会破坏 REST。您会发现大量有关此特定项目本身的文章。 Cookie 将随您的请求一起传递,就像您传递服务器为向您提供数据所需的任何特定信息的方式一样。如果发送 cookie 破坏了 REST,那么向 API 发送参数也应该破坏 REST!
- 现在,一种非常常见的方法(绝不是唯一的方法)是使用基于代币的 SPA 系统。原因虽然很多,但最容易解释的是,您的服务(Web API 或其他)可以单独托管,并且您的客户端作为 CORS 客户端工作。在这种情况下,您可以选择任何形式进行身份验证,创建一个安全 token 并将其发送回客户端,并且根据该 token 检查需要经过身份验证的用户的每个资源。该 token 将作为每个请求的 header 的一部分发送。没有 token 会导致简单的 401(未经授权),无效 token 可能会导致 403(禁止)。
没有人说 SPA 需要全部是静态 HTML,带有数据绑定(bind),它也可以是返回正在加载的部分的 MVC 站点(我过去做过的事情)。就仅使用 HTML 和 JS(特别是 Durandal)而言,甚至有一些方法可以保护客户端应用程序。最终,锁定来自服务器的数据,并在收到 401/403 时将客户端路由到登录屏幕。
如果您更关心 XSS 或请求伪造,即使仅使用 HTML 和 JS,也有一些方法可以防止这种情况发生(尽管不像使用 MVC 删除防伪造 token 那么简单)。
我的两分钱。
关于asp.net-mvc - 我应该如何保护我的 SPA 和 Web.API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284081/