Azure AD未解析Angularjs $ state.go更改

时间:2017-03-01 23:18:08

标签: angularjs adal

我正在尝试在预先存在的Angularjs应用程序中使用Azure AD v1.0.14,该应用程序使用ui.router来管理状态更改。好消息是我可以成功登录和注销,但坏消息是我的应用程序在管理状态更改时遇到问题。在将Azure AD模块集成到代码中之前,这些状态更改有效。

function ($stateProvider, $urlRouterProvider, adalProvider) {

    $urlRouterProvider.rule(function ($injector, $location) {
        console.log("Requested URL path=" + $location.$$path);
    });

    $urlRouterProvider.when('/home', '/home/app');
    $urlRouterProvider.when('/app', '/home/app');            
    $urlRouterProvider.otherwise(function ($injector, $location) {
        console.log('$urlRouterProvider.otherwise redirecting to ' + $location.$$path);
        var $state = $injector.get("$state");
        $state.go("login");
    });

    $stateProvider
         .state("login", ...)
         .state("home", {
             abstract: true,
             url: '/home',
             requireADLogin: false,
             templateUrl: 'home.html'
         })
         .state("app", {
             url: '/app',
             requireADLogin: false,
             templateUrl: 'app.html',
             controller: 'app'
         })
         .state("more", ...)

}

最初,条目成功进入登录状态/控制器(我登录/注销),但尝试$ state.go(' app')或手动URL条目进入' http://baseurl/#/home/app'自动重定向回“登录”#39;通过.otherwise规则,看来这是由Azure AD根据下面的日志输出完成的。

Wed, 01 Mar 2017 22:56:38 GMT:1.0.14-VERBOSE: Location change event from http://localhost:3000/#/login to http://localhost:3000/#/home @state.js:12 
Requested URL path=/home @app.js:14 
Wed, 01 Mar 2017 22:56:38 GMT:1.0.14-VERBOSE: Location change event from http://localhost:3000/#/home to http://localhost:3000/#/home/app @state.js:12   
Requested URL path=/home/app @state.js:19 
$urlRouterProvider.otherwise redirecting to /home/app @app.js:14 
Wed, 01 Mar 2017 22:56:38 GMT:1.0.14-VERBOSE: Location change event from http://localhost:3000/#/home/app to http://localhost:3000/#/login @state.js:12 
Requested URL path=/login @state.js:12

我的问题是为什么Azure AD会重定向回登录? Azure AD无法处理抽象/嵌套状态吗?有没有解决这个问题,因为我们的家乡是必不可少的。

1 个答案:

答案 0 :(得分:0)

由于哈希“#”之后的网址格式是客户端,服务器将不会处理这些部分,并且在重定向网址中将忽略这些部分,您可以尝试在angularjs中使用html5模式:

// using '!' as the hashPrefix but can be a character of your choosing
app.config(['$locationProvider', function($locationProvider) {
    $locationProvider.html5Mode(true).hashPrefix('!');
}]);  
  

Azure AD无法处理抽象/嵌套状态吗?

您可以在adal中为js的配置添加anonymousEndpoints,例如:

adalAuthenticationServiceProvider.init({
    tenant: TENANT_ID,
    clientId: CLIENT_ID,
    anonymousEndpoints: ['public/'] //will not authorize for public pattern 
  },

您可以在https://github.com/AzureAD/azure-activedirectory-library-for-js#getting-started的6点找到更多信息。