2017-02-15 3 views
2

Я надеюсь использовать службу Active Directory Azure для аутентификации как часть Angular SPA. С этой целью я пытаюсь использовать Active Directory Authentication Library (ADAL) for JavaScript. Но, хотя кажется, что он правильно перенаправляется на службы входа в систему и после ввода учетных данных возвращается к URL-адресу ответа, я не могу получить userInfo.isAuthenticated (userInfo пуст) в моем контроллере.Angular SPA adal login вызывает Azure AD и URL-адрес ответа, но не возвращает userInfo или isAuthenticated

Как я могу отладить, почему аутентификация не кажется завершающей?

Ниже мое приложение код:

'use strict'; 

var myClientApplication = angular.module('myApplication', [ 
    'ngRoute', 'myControllerModule', 'AdalAngular' 
]); 

Logging = { 
    level: 3, 
    log: function (message) { 
     console.log(message); 
    } 
}; 

var appStart = function($routeProvider, $httpProvider, adalProvider) { 
    $routeProvider.when('/xxx', { 
     templateUrl: '/app/views/xxx.html', 
     controller: 'xxxController', 
     requireADLogin: true 
    }).when('/home', { 
     templateUrl: '/app/views/home.html', 
     controller: 'homeController', 
     requireADLogin: false 
    }).otherwise({ 
     redirectTo: '/home' 
    }); 

    adalProvider.init({ 
     instance: 'https://login.microsoftonline.com/', 
     tenant: 'mydefaultdomain.onmicrosoft.com', 
     clientId: '91dc4efa-xxxx-xxxx-xxxx-c579f5f07ceb', 
     endPoints: {}, 
     //anonymousEndpoints: {}, 
     extraQueryParameter: 'nux=1', 
     cacheLocation: 'localStorage', 
    }, $httpProvider); 
}; 

myClientApplication.config(['$routeProvider', '$httpProvider', 'adalAuthenticationServiceProvider', appStart]); 

Мой код контроллера:

'use strict' 

var myControllerModule = angular.module('myControllerModule', []); 

myControllerModule.controller('homeController', ['$scope', 'adalAuthenticationService', function ($scope, adalService) { 
    $scope.userInfo = adalService.userInfo; 
    $scope.login = function() { 
     adalService.login() 
    } 
    $scope.logout = function() { 
     adalService.logOut() 
    } 
}]); 

myControllerModule.controller('xxxController', ['$scope', function($scope){}]); 

Представление для домашнего контроллера:

<div class="container"> 
<button class="btn btn-primary" title="Login" ng-click="login()">Login</button> 
<button class="btn btn-primary" title="Logout" ng-click="logout()">Logout</button> 

<p>status:{{userInfo.isAuthenticated}}</p> 
<p>user:{{userInfo.userName}}</p> 
<p>aud:{{userInfo.profile.aud}}</p> 
<p>iss:{{userInfo.profile.iss}}</p> 

Какие результаты в:

status:false 
user: 
aud: 
iss: 

В рамках управления Azure, у меня есть Active Directory (Status = Active), с определенным Заявлением со следующей конфигурацией:

Следующие отображается в журнале сообщений после нажатия кнопки Войти прессы:

// I think this is coming to index 
app.js:10 Wed, 15 Feb 2017 22:45:09 GMT:1.0.13-VERBOSE: Location change event from http://127.0.0.1:8080/app/index.html#!#id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJ…-4325-bcff-5bb5e5a552b9&session_state=709884dd-ad85-4b58-b403-d3155ab441cc to http://127.0.0.1:8080/app/index.html#!#id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJ…-4325-bcff-5bb5e5a552b9&session_state=709884dd-ad85-4b58-b403-d3155ab441cc 
// I think this is the redirect for the home controller 
app.js:10 Wed, 15 Feb 2017 22:45:10 GMT:1.0.13-VERBOSE: Location change event from http://127.0.0.1:8080/app/index.html#!#id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJ…-4325-bcff-5bb5e5a552b9&session_state=709884dd-ad85-4b58-b403-d3155ab441cc to http://127.0.0.1:8080/app/index.html#!/home#id_token=eyJ0eXAiOiJKV1QiLCJhbG…-4325-bcff-5bb5e5a552b9&session_state=709884dd-ad85-4b58-b403-d3155ab441cc 
// Don't know what this means? 
app.js:10 Wed, 15 Feb 2017 22:45:10 GMT:1.0.13-VERBOSE: Url: /app/views/home.html maps to resource: null 

Версии:

  • Адал-угловые: 1.0.13
  • угловой: 1.6.2
  • узел: 6.9.5
  • НПМ: 4.1.2 ОС:
  • для Windows 10

Запуск с помощью «старта НОГО», где старта = http://127.0.0.1:8080/../app.js

+0

Вы пытались привязываться к 'userInfo', не устанавливая его в своем контроллере? Это объект, открытый из корневой области, поэтому вам не нужно это делать: '$ scope.userInfo = adalService.userInfo;'. – juunas

ответ

3

Проблемы была вызвана искаженным перенаправление URL, который содержит символ '! '.

После того как я изменить код ниже, я могу получить информацию об аутентификации также:

var appStart = function ($routeProvider, $httpProvider, adalProvider, $locationProvider) { 
    $locationProvider.hashPrefix('');//add this line to fix the URL 
    $routeProvider.when('/xxx', { 
     templateUrl: 'spa/app/views/xxx.html', 
     controller: 'xxxController', 
     requireADLogin: true 
    }).when('/home', { 
     templateUrl: '/app/views/home.html', 
     controller: 'homeController', 
     requireADLogin: false 
    }).otherwise({ 
     redirectTo: '/home' 
    }); 

    adalProvider.init({ 
     instance: 'https://login.microsoftonline.com/', 
     tenant: 'xxx.onmicrosoft.com', 
     clientId: 'xxxx-5d42-4e62-858e-9d5864b71f7a', 
     endPoints: {}, 
     popUp:true, 
     //anonymousEndpoints: {}, 
     extraQueryParameter: 'nux=1', 
     cacheLocation: 'localStorage', 
    }, $httpProvider); 
}; 

//add $locationProvider 
myClientApplication.config(['$routeProvider', '$httpProvider', 'adalAuthenticationServiceProvider', '$locationProvider', appStart] 

Пожалуйста, дайте мне знать это помогает.

+0

Спасибо, что сработало. Как вы это понимаете, просто для проблемных целей?BTW, я использовал следующий пример, в котором не упоминается упомянутое выше исправление: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-angular – HiDefLoLife

+0

Кроме того, я думаю, вы имели в виду «неправильный», а не «почтовый формат», верно? – HiDefLoLife

+1

Да, вы были верны. Это была опечатка, и я изменил пост. И я это понимаю, сравнивая код с образцом, который работал для меня раньше :) –

Смежные вопросы