使用后端授权的JavaScript安全模式?

Der*_*ley 26 javascript security authorization design-patterns backbone.js

我正在寻找一些关于如何在客户端JavaScript中处理基本安全需求(例如授权)的良好资源,模式和实践.

我正在建立一个网站,其后端系统运行一个常见的MVC框架.后端将处理所有真正的安全需求:授权和身份验证.前端将使用Backbone.js,jQuery和一些其他库构建,以提供非常丰富的用户体验.

这是我需要处理的一个场景的示例:

我有一个数据网格,顶部有几个按钮.如果选择网格中的某个项目,则会启用某些按钮,以便您可以对所选项目执行该操作.这个功能很容易构建......

现在我需要考虑授权.后端服务器将仅呈现允许用户使用的按钮.此外,后端服务器将在用户尝试执行该操作时检查授权....所以如果未经授权,后端将被覆盖,用户将无法执行他们尝试的操作.

但是JavaScript怎么样?如果我的代码设置了一堆jQuery点击处理程序或启用和禁用按钮的其他事件,我该如何处理不存在的按钮?我只是写了一堆丑陋的if语句来检查按钮的存在吗?或者我是否以一种允许我只根据授权将存在的按钮的JavaScript发送到浏览器的方式来编写JavaScript?要么 ???

现在想象一下树视图可能允许也可能不允许基于授权的拖放功能......以及基于授权可能存在或不存在的添加/编辑表单......以及所有其他复杂的授权需求,很多JavaScript来运行前端的那些部分.

我正在寻找资源,模式和实践来处理这些类型的场景,其中后端处理真正的授权,但前端还需要考虑基于授权的不存在的事情.

poe*_*ezn 7

我可以看到三件相当简单的事情:

  • 模块化骨干视图 我非常喜欢嵌套和高度模块化的Backbone视图.也就是说,树中的每一行都可以是Backbone视图,并根据自己的授权要求做出反应.

  • 多事件哈希建立在你切换出根据您的授权要求和由事件触发delegateEvents()视图多个事件哈希值.这样你可以绕过一组丑陋的if语句.

  • 多个模板与此类似,您可以根据授权要求指定要呈现的多个模板.

这三个都需要一个设置的事件结构(例如使用您自己的ventPubSub处理程序),您可以根据RESTful服务器请求的响应或基于某些客户端函数触发授权检查.


myt*_*thz 4

我在客户端处理身份验证的方法是拥有一个单例 Backbone 模型,该模型包含一个isAuthenticated值,我最初从服务器填充该值:

@{
  App.user.set({ isAuthenticated: @UserSession.IsAuthenticated.ToString().ToLower() });
}
Run Code Online (Sandbox Code Playgroud)

然后,所有基于身份验证更改行为的 JavaScript 控件/功能基本上只是侦听此字段上的更改并将其自身重新呈现为正确的状态。所有这些视图/逻辑都是使用 JavaScript 完成的,因此它可以在页面生成时(由服务器)或使用 Javascript/ajax 在客户端上工作。

我不维护现有/隐藏功能的事件处理程序,我重新创建所有 UI 元素,并在基于 isAuthenticated 标志重新渲染视图后重新连接所有事件处理程序。

好处是,一旦您在客户端上使用 ajax 登录(即在服务器页面呈现之后),您只需设置相同的字段,就像魔术一样(Backbone FTW :),一切都可以正常工作并正确呈现。