angularjs azure webpack azure-active-directory adal

angularjs - Adal y Adal-Angular-refresque el bucle infinito del token



adal angularjs (2)

He configurado las bibliotecas adal y adal-angular v.1.0.10 con mi aplicación SPA con mayor éxito. Estoy usando webpack, pero los menciono en mi página html con la esperanza de evitar problemas de alcance global (aunque me gustaría que fuera una dependencia). Todo funciona hasta que el navegador intente abrir un iframe para adquirir un token de actualización, y cada iframe abre otro iframe dentro de él. No registra ningún error, y no puedo encontrar una explicación sobre lo que estoy haciendo mal. Así que me veo obligado a ejecutar la aplicación solo en un navegador de incógnito. Agradecería incluso una explicación de por qué sucede esto, ya que estamos muy casados ​​con Azure AD.

secciones relevantes de index.html

<md-button aria-label="Login" ng-if="!userInfo.isAuthenticated" ng-click="login()"> Login </md-button> <script src="build/app.bundle.js" charset="utf-8"></script> <script src="Scripts/adal.min.js" charset="utf-8"></script> <script src="Scripts/adal-angular.min.js" charset="utf-8"></script>

mi app.js

angular.module(''myApp'', [''AdalAngular'', require(''angular-route''), require(''angular-animate''), require(''angular-sanitize''), ''ngCookies'', etc..]) .config([''$routeProvider'', ''$locationProvider'', ''$mdThemingProvider'', ''$httpProvider'', ''adalAuthenticationServiceProvider'', function ($routeProvider, $locationProvider, $mdThemingProvider, $httpProvider, adalProvider) { // azure ad init adalProvider.init({ instance: ''https://login.microsoftonline.com/'', tenant: TENANT, clientId: CLIENTID, cacheLocation: ''localStorage'', anonymousEndpoints: [] }, $httpProvider ); $routeProvider .when(''/home'', { templateUrl: ''/App/Layout/home.html'' }) .when(''/admin'', { templateUrl: ''/App/Admin/admin.html'', requireADLogin: true }) etc... $locationProvider.html5Mode(true).hashPrefix(''!''); }]);


Después de una larga serie de discusiones sobre GitHub, me llamó la atención que esto era un problema con el AuthenticationContext in adal.js. Sigue abriendo un iframe mientras intenta autenticarse, lo que causa un ciclo infinito. Lo hice funcionar al exponer el AuthenticationContext.

var AuthenticationContext = require(''expose?AuthenticationContext!./../Scripts/adal.js''); require(''./../Scripts/adal-angular.js'');

Esto solo puede funcionar con la versión de la versión 0.3.0 de la biblioteca. Pero es lo suficientemente bueno por ahora. Esperemos que alteren la biblioteca en el futuro para que sea más compatible con las aplicaciones js modernas.


En adal.js en el método ''getRequestInfo'', el iframe ''mirará'' al padre para AuthenticationContext. Esto significa que AuthenticationContext tiene que estar en el alcance de la ventana.

//ES6 import AuthenticationContext from "adal-angular/lib/adal"; window.AuthenticationContext = AuthenticationContext; ... //ES5 window.AuthenticationContext = require("adal-angular/lib/adal"); ...