微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – dojo Web应用程序身份验证

我正在尝试使用Dojo开发一个JavaScript的Web应用程序.我面临的问题是限制对部分应用程序的访问.经过身份验证的用户应该能够访问所有内容,而未经过身份验证的用户应该只能访问登录屏幕.

问题是没有(我知道)将阻止用户打开浏览器javascript终端并输入类似:app.displayRestrictedContent();从而获得对经过身份验证的用户的屏幕的访问权限.

我已经实现了基于ajax的登录;所有ajax调用都通过会话进行保护.因此,虽然未经过身份验证的用户可以加载受限制的屏幕,但他们无法为其获取数据.但是,这个屏幕可以随意访问似乎是错误的.

我想做不可能的事吗?编写if(user.auth)app.displayRestrictedContent();等代码似乎很愚蠢.什么时候这么容易被规避.这让我相信我错过了一些对其他人来说相当明显的东西.我在基于纯JavaScript的应用程序和身份验证模型上找不到太多信息.

最佳答案
我不是专家,但这里有一些关于我的想法.我认为你没有错过任何东西(如果是这样,我也有) – 我认为这是所有客户端应用程序的一个非常基本的问题,无论是编译的可执行文件还是Javascript.

当然,编译后的可执行文件并没有受到特别的限制,因为它已被制作成很难读取或反编译成有用的机器代码.但是,使用Javascript,应用程序通常与您编写的完全一样,因此很容易修改和推理.

这让我想到了第一个解决方案:混淆你的Javascript.如果您使用带有shrinksafe参数的Dojo构建工具,则会删除所有不必要的空格并缩短所有标识符,从而使代码很难阅读.我称这是一个解决方案,有些人可能会说,即使这给了它太多的信任 – 我自己仍然认为这是值得做的.毕竟,缩小的代码也下载得更快!

我在我的应用程序中采取的第二个措施是将不同的部分分成“构建层”.例如,在我的构建配置文件中,我会有类似的东西

dependencies = {
    ..
    layers: [
        { name: "../myApp/Core.js",resourceName: "myApp.Core",dependencies: ["myApp.Core","myApp.Foobar"] 
        },{ name: "../myApp/modules/Login.js",resourceName: "myApp.modules.Login",dependencies: ["myApp.modules.Login","myApp.modules.LoginUi"...],layerDependencies: ["../myApp/Core.js"]
        },{ name: "../myApp/modules/Secret.js",resourceName: "myApp.modules.Secret",dependencies: ["myApp.modules.Secret","myApp.modules.SecretUi"],layerDependencies: ["../myApp/Core.js"],authentication: 42
        }
    ]
}

现在,我不是直接将构建的JS文件作为静态文件提供,而是让请求通过我的服务器端应用程序中的控制器,该应用程序检查JS层是否需要身份验证以及用户是否以必要的访问权限登录.

这确实有一定的缺点. JS文件没有被缓存,如果我在一个构建层中拥有所有JS,那么应用程序的加载速度可能会稍快一些.当然,制作图层的细微差别也是有限的.更多层意味着更麻烦,但更精细的模块访问.

我有兴趣听到其他人也对此感兴趣.这是一个很好的问题.

原文地址:https://www.jb51.cc/js/429486.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐