2017-05-04 2 views
0

Je travaille sur une application utilisant Framework 4.6.2 et angularjs, Nous utilisons adal.js et adal -angular.js. Le problème que nous rencontrons est que lorsque vous vous déconnectez de l'application et cliquez sur un lien hypertexte qui pointe vers l'application (pas la racine de l'application) après la connexion sur xxxx.onmicrosoft.com, il vous redirige vers la racine.Azure Active Directory (ADAL) ne vous redirige pas vers la page que vous essayez d'ouvrir lorsque vous devez vous connecter

Par exemple, vous cliquez sur un lien ou mettez l'adresse suivante dans le navigateur

http://localhost:4434/#/ticket/search

L'application vous mènera à la page de connexion:

enter image description here

Après que redirect moi à la racine

http://localhost:4434/#/

au lieu de http://localhost:4434/#/ticket/search

Voici le code que j'ai en place:

 adalAuthenticationServiceProvider.init({ 
      tenant: 'xxxxx.onmicrosoft.com', 
      clientId: 'xxxx-xxxx-xxxx-xxxxx', 
      cacheLocation: 'localStorage', 
      popUp: true 
     }, $httpProvider); 

.Lorsque ("/ billets/recherche", { contrôleur: "TicketsSearchController", templateURL: « app/billets/templates/search.html », allowNavBack: true, requireADLogin: true} ) nous utilisons AdalJS et v1.0.14 ADAL-angulaire

Microsoft.IdentityModel.Clients.ActiveDirectory 3.13.9

Voici comment la classe de démarrage ressemble

public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 

     app.UseWindowsAzureActiveDirectoryBearerAuthentication(
       new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
       { 
       Tenant = "xxxxxx.onmicrosoft.com", 
       TokenValidationParameters = new TokenValidationParameters 
       { 
       ValidAudience = "xxxxxx.onmicrosoft.com/" 
       } 

      }); 
     app.UseAeActiveDirectoryViaAzureAuthentication(WebConfigurationManager.AppSettings["ida:ClientId"], 
      WebConfigurationManager.AppSettings["ida:RedirectUri"]); 

     app.MapSignalR(); 
    } 
} 

Le problème est que peu importe ce que vous essayez URL d'aller, il vous redirige toujours l'url sur Azure I spécifié qui est le même que j'utilise dans web.config

Mais le résultat attendu est que si vous naviguez vers une URL comme http://localhost:4434/#/ticket/search après votre connexion, vous devriez être r edirected à cette URL non à la racine http://localhost:4434

Merci d'avance pour toute aide que vous pouvez fournir

Jose

Répondre

2

Cette cause racine est que le ADAL vérifier l'état si est protégé par Azure AD avant l'emplacement est changé. Ainsi, l'ADAL va enregistrer l'emplacement actuel comme loginStartPage. Pour vous assurer que la page redirige vers les prévisualisations de chemin, nous pouvons changer le code source d'ADAL.

Par exemple, nous pouvons modifier le stateChangeHandler function pour enregistrer le chemin, puis modifier le loginHandler pour modifier la page de connexion comme nous le souhaitions.

var stateChangeHandler = function (e, toState, toParams, fromState, fromParams) { 
        if (toState) { 
         var states = getStates(toState); 
         var state = null; 
         for (var i = 0; i < states.length; i++) { 
          state = states[i]; 
          if (isADLoginRequired(state, _adal.config)) { 
           if (!_oauthData.isAuthenticated) { 
            if (!_adal._renewActive && !_adal.loginInProgress()) { 
             _adal.info('State change event for:' + $location.$$url); 
             //pass the url here 
             loginHandler(toState.url); 
            } 
           } 
          } 
... 

var loginHandler = function (path) { 
    _adal.info('Login event for:' + $location.$$url); 
    if (_adal.config && _adal.config.localLoginUrl) { 
     $location.path(_adal.config.localLoginUrl); 
    } 
    else { 
     // directly start login flow 
     _adal.info('Start login at:' + $location.$$absUrl); 
     $rootScope.$broadcast('adal:loginRedirect'); 
     //change the loginStatePage here 
     _adal.login($location.$$absUrl+'#!'+path); 
    } 
}; 

C'est une solution à ce problème, afin de soutenir la réorientation de l'itinéraire spécifique après l'authentification ADAL en utilisant la ADAL première pour JavaScript, je suggère que vous rouvrez un nouveau numéro de here.