asp.net - AngularJs + ServiceStack 应用程序的安全性

标签 asp.net security angularjs servicestack angularjs-routing

我有一个在前端有四个模块的应用程序,我试图在前端使用尽可能多的 AngularJs 我正在使用一个空网站 asp.net 项目来托管所有文件和 REST serviceStack,我的项目有以下结构:

~/ (web.config, global.asax and all the out of the box structure for an asp.net website)
- App <-  AngularJs 
    - Users  <-  js controllers and views (static html files)
    - Companies
    - BackEnd
    - Public
    Index.html
    IndexCtrl.js
    App.js
- Content
- Js

我使用 angularjs 服务调用,后端使用 REST 和 servicestack。

问题是我怎样才能限制只有经过身份验证的用户才能访问这些静态 html 文件?比方说公司内部的那些,例如后端和用户

最佳答案

您好,经过一些研究,这是对我有用的解决方案:

  1. 安装 razor markdown来自 nuget
  2. 更改文件结构以匹配默认行为 RM [Razor Markdown] 到/views
  3. 按照 this service stack example 中描述的方法修改网络配置
  4. 将所有静态 htmls 文件更改为 .cshtml 文件,这在默认情况下会创建没有扩展名的相同路由,例如没有扩展名的/views/{Pagename},我只是使用这种方法来简化授权逻辑的实现(至少对我而言)
  5. 使用授权属性更新服务方法您可以找到更多信息 in this page

为了说明更多,这是我到目前为止的路由定义:

'use strict';
angular.module('myApp', ['myApp.directives', 'myApp.services']).config(
    ['$routeProvider', function($routeProvider) {
        $routeProvider.when('/Dashboard', {
            controller: 'dashboardCtrl',
            templateUrl: 'Views/dashboard'
            }).when('/Payments', {
            controller: 'paymentsCtrl',
            templateUrl: 'Views/payments'
        }).
            when('/Login', {
                controller: 'loginCtrl',
                templateUrl: 'Views/login'
            });
    }]

);

请注意,引用现在指向 Razor 路径。

这是我用angular做的一个小菜单

<div class="container">

  <div class="navbar" ng-controller="indexCtrl">
    <div class="navbar-inner">
      <a class="brand" href="#/">header menu</a>
      <ul class="nav">
         <li ng-class="{active: routeIs('/Dashboard')}"><a href="#/Dashboard">Dashboard</a></li>
         <li ng-class="{active: routeIs('/Login')}"><a href="#/Login">Login</a></li>
         <li ng-class="{active: routeIs('/Payments')}"><a href="#/Payments">payments</a></li>
      </ul>
    </div>
  </div>


  <ng-view></ng-view>

</div>

假设支付页面受到限制,所以每次我点击该页面时,我都会收到 401 未经授权的消息。

服务主机:

 public override void Configure(Container container)
        { 

            Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
                new FacebookAuthProvider(appSettings), 
                new TwitterAuthProvider(appSettings), 
                new BasicAuthProvider(appSettings), 
                new GoogleOpenIdOAuthProvider(appSettings),
                new CredentialsAuthProvider()
            })); //I'm going to support social auth as well.

            Plugins.Add(new RegistrationFeature());

            Routes.Add<UserRequest>("/Api/User/{Id}");
            Routes.Add<LoginRequest>("/Api/User/login","POST");
            Routes.Add<PaymentRequest>("/views/Payments");


        }

希望对你有帮助

关于asp.net - AngularJs + ServiceStack 应用程序的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977280/

相关文章:

html - 当屏幕分辨率减小时,Bootstrap Asp.net Web 表单页面没有响应

javascript - jwt 认证 : cookie vs header

java - 当我尝试从我的 webapp 在 tomcat 服务器中发送 get 或 post https 请求时出现 SSLHandshakeException

javascript - Angular : automatically detect change in model

c# - 重定向到错误页面

asp.net - asp.net 中的 cookie 问题。值在 response.redirect 后恢复

JavaScript 运行时错误 : Unable to get property 'innerHTML' of undefined or null reference in asp. 网络

Javascript XSS 预防

javascript - NG-repeat 不起作用 AngularJs

javascript - TravisCI 和 SauceLabs - 文件系统上不存在文件