2016-05-13 15 views
2

Ich habe die adal und adal-eckigen v.1.0.10 Bibliotheken mit meiner SPA-Anwendung mit meist großem Erfolg eingerichtet. Ich benutze Webpack, aber referenziere diese in meiner HTML-Seite in der Hoffnung, globale Probleme zu vermeiden (obwohl ich möchte, dass es eine Abhängigkeit ist). Alles funktioniert, bis der Browser versucht, einen iframe zu öffnen, um ein Aktualisierungstoken zu erhalten, und jeder iframe öffnet einen weiteren iframe in sich. Es protokolliert keine Fehler, und ich kann keine Erklärung finden, was ich falsch mache. Daher muss ich die Anwendung nur in einem neuen Inkognito-Browser ausführen. Ich würde sogar eine Erklärung dafür, warum dies passiert, schätzen, da wir mit Azure AD sehr verheiratet sind.Adal & Adal-Angular - Refresh Token Endlosschleife

relevante Abschnitte 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> 

mein 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('!'); 

    }]); 
+0

Dies scheint ein Problem in Adaljs. Sehen Sie dieses [Problem auf ihrer github Seite] (https://github.com/AzureAD/azure-activedirectory-library-for-js/issues/216) und diese [in Verbindung stehende SO Frage] (http://stackoverflow.com/) Fragen/34686460/adal-js-nonce-ist-nicht-gleich-wie-undefiniert /). Haben Sie jemals einen Workaround oder eine Lösung dafür gefunden? Ich erlebe das exakt gleiche Verhalten und die Info bei diesen Links hat sich leider nicht als fruchtbar erwiesen. – Bryan

Antwort

0

Nach einer langen Reihe von Diskussionen über GitHub wurden darauf aufmerksam gemacht, dass dies mit der ein Thema war AuthenticationContext in adal.js. Es öffnet einen Iframe, während er versucht, sich zu authentifizieren, was zu einer Endlosschleife führt. Ich habe es funktioniert, indem ich den AuthenticationContext freigelegt habe.

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

Dies funktioniert möglicherweise nur mit der Version 0.3.0 Version der Bibliothek. Aber für jetzt ist es gut genug. Hoffentlich werden sie die Bibliothek in der Zukunft verändern, um sie kompatibler mit modernen js-Anwendungen zu machen.

+0

Ich wollte nur hinzufügen, dass dies ab 1.0.11 immer noch ein Problem ist, trotz ihrer Bemühungen, die Endlosschleifen zu stoppen. Es muss immer noch an den globalen Bereich in js angehängt werden. Ich beobachte weiterhin und hoffe, dass die veralteten Versionen, die ich verwenden muss, nicht obsolet werden. –

0

In adal.js in "getRequestInfo" -Methode, wird der iframe in das übergeordnete Element für den AuthenticationContext "schauen". Dies bedeutet, dass der AuthenticationContext im Fensterbereich sein muss.

//ES6 
import AuthenticationContext from "adal-angular/lib/adal"; 
window.AuthenticationContext = AuthenticationContext; 
... 

//ES5 
window.AuthenticationContext = require("adal-angular/lib/adal"); 
... 
Verwandte Themen