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

标签: Asp.net AngularJS
发布时间: 2017/3/26 0:17:00
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个应用程序有四个模块,在前端,我试图使用如一样在前面可能 AngularJs 结束我使用一个空网站 asp.net 项目主办的所有文件和其他 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 服务调用和后端用 servicestack 的其余部分。

问题是如何限制访问只对经过身份验证用户对这些静态 html 文件?让我们说那些是里面的内公司、 后端和用户的示例

解决方法 1:

Hi 后做一些研究,这是解决办法,为我工作了︰

  1. 从 nuget 安装剃须刀降价
  2. 更改为 /views 的文件结构相匹配的默认行为 RM [Razor降价]
  3. 修改 web 配置后本服务堆栈示例中描述的方法
  4. 更改所有静态 htmls 文件.cshtml 文件,这在默认情况下创建不像 /views/ {Pagename} 不带扩展名扩展名相同的路线,我只用这种方法来得到授权逻辑容易实现 (至少对我来说)
  5. 用你可以找出更多在此页中的授权属性更新服务方法

为了说明点燃的多一点到目前为止这是我的路由定义中︰

'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路径。

这是我这辈子做角一个小菜单

<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");


        }

我希望能够帮助

赞助商