Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何保护一个有棱角的水疗网站?_Javascript_Performance_Security_Angularjs_Single Page Application - Fatal编程技术网

Javascript 如何保护一个有棱角的水疗网站?

Javascript 如何保护一个有棱角的水疗网站?,javascript,performance,security,angularjs,single-page-application,Javascript,Performance,Security,Angularjs,Single Page Application,我的开发团队从一个SPA网页开始,该网页只通过WebAPI使用数据。以下是应该在现场使用的技术: AngularJS-水疗中心 承载令牌-后端安全 我已经做了功课,检查了几种保护页面的方法,其中一种是(1)有一个主控制器,可以与后端通信以验证用户身份,如果有效,则导航到预期的页面,但如果无效,则重新路由。但是这里主要关注的是每一个操作上的通信的健谈性/干扰性-数千个呼叫将通过服务器进行身份验证 (2) 另一种建议的方法是在用户登录后,使用setInterval()调用不时验证其会话。我想我在银行

我的开发团队从一个SPA网页开始,该网页只通过WebAPI使用数据。以下是应该在现场使用的技术:

  • AngularJS-水疗中心
  • 承载令牌-后端安全
  • 我已经做了功课,检查了几种保护页面的方法,其中一种是(1)有一个主控制器,可以与后端通信以验证用户身份,如果有效,则导航到预期的页面,但如果无效,则重新路由。但是这里主要关注的是每一个操作上的通信的健谈性/干扰性-数千个呼叫将通过服务器进行身份验证

    (2) 另一种建议的方法是在用户登录后,使用setInterval()调用不时验证其会话。我想我在银行网站上看到过这种行为


    如果你有其他的方法,你能建议吗

    您可以像平常一样使用基于cookie的身份验证,使用基于CSRF请求中cookie的令牌,并在cookie过期时清除这两种身份验证,这里唯一要添加的是angluarjs的响应处理端,如果发生身份验证错误,整个页面将刷新。如果你已经使用了某种辅助和CSRF,服务器端没有太大的变化。

    < p>你正在制作SPA,所以我假设你想要确保的所有数据(你的数据)都是通过你的WebAPI传递的,你可以考虑你的角度模板。 在这种情况下,基本上可以忽略客户端的身份验证,而只验证对WebAPI的调用。任何未经验证、未经授权或来自过期会话的服务器调用都会返回HTTP 401,您的用户可以通过重定向到登录页面对其作出响应。您可以使用HTTP拦截器来简化代码(这里的示例来自)

    此外,如果您知道服务器端会话超时设置为20分钟,那么您还可以使用HTTP侦听器来跟踪上次HTTP请求的时间。当时间到达19分钟前时,您可以警告用户,除非用户响应,否则他们将在1分钟内注销。在这种情况下,您可以调用“保持活动”服务重置超时,否则在20分钟后重定向到会话过期页面。所以不需要投票


    为了获得更好的用户体验,每次加载视图时,您都可以执行一些基本的客户端检查,以检查会话cookie是否存在。如果它不存在(例如,它们从深层链接登陆),那么您可以立即重定向到登录,而无需调用服务器。如果它确实存在,请按正常方式进行,知道对WebAPI的第一次调用将验证它。

    对我的问题的否决票有何解释?有什么不对劲吗?也许被否决了,因为它可能被解释为基于意见的?我并不同意,这对我来说似乎是一个合理的问题。嗨,iamgopal,谢谢你在这方面的意见。但不幸的是,基于cookie的身份验证并不是我们现在的方向。后端人员提到了术语,C#后端上的承载令牌身份验证类型。嗨,Mike“.只需验证对WebAPI的调用”->哦,我现在明白了,这与我在上述问题描述中提到的相反。现在要在后端检查资源(包括页面),而不是(1)首先进行Ajax调用(2)返回allow=true标志(3)重新调用原始路由调用。总共3次往返“.过期会话返回HTTP 401”->侦听器仅检查无效呼叫,然后返回401,如果是401,则返回登录页面->如果用户被路由到登录,他/她是否仍然能够浏览允许他/她登录的页面?澄清:1。任何用户(授权或未授权)都可以请求任何角度路线。2.视图将渲染,其控制器将开始运行。此时,用户可能能够看到视图的内容,但就安全性而言,这是可以的,因为视图本身不包含敏感数据。(就用户体验而言,这不是很好,但有一些简单的解决办法。)。控制器现在进行服务器调用以获取数据。4.服务器发现用户无权查看此数据,因此返回401。5.Angular放弃部分渲染视图,而是显示登录视图。是的,您在任何部分都是正确的。在视图已经显示的部分,即使ajax调用没有完成,我知道确实有解决方案,所以我想这不是问题。关于第3项至第5项,一切都很清楚:谢谢你帮我。如果你能提供一些关于这方面的基本到高级的资源,我将非常感激!
    myapp.factory('myHttpResponseInterceptor',['$q','$location',function($q,$location){
      return {
        response: function(response){
          return promise.then(
            function success(response) {
            return response;
          },
          function error(response) {
            if(response.status === 401){
              $location.path('/signin');
              return $q.reject(response);
            }
            else{
              return $q.reject(response); 
            }
          });
        }
      }
    }]);
    //Http Intercpetor to check auth failures for xhr requests
    myapp.config(['$httpProvider',function($httpProvider) {
      $httpProvider.interceptors.push('myHttpResponseInterceptor');
    }]);