2017-04-11 2 views
0

Ich habe gesehen, was scheint eine nette Möglichkeit, Offline-Modus für Adal zu behandeln, aber es basiert auf Anhängen an den DisplayCall und Zugriff auf den Kontext .. leider Kontext isn ' t in der Angular Wrapper ausgesetzt. Bevor ich schreibe etwas Brauch um ADAL direkt, dachte ich, ich würde fragen, wie andere AppCache-basierte Offline-Anwendungen mit ADAL behandelt haben? Mein Anwendungsfall ist ein fleckiger Internetzugang über mobile Geräte in ländlichen Gebieten. Online möchte ich, dass die Benutzer den ADAL-Fluss durchlaufen (was gut funktioniert). Offline Ich möchte, dass sie prüfen, ob sie über einen lokal gehashten Pin Zugriff auf den lokalen Datencache haben.ADAL-Angular Offline-Unterstützung (fehle ich etwas?)

Gedanken? Danke allen.

+0

Kannst du mehr auf die lokale ca che Lagerung? –

+0

Also lokalen Cache wäre was auch immer Aktivität der Benutzer offline tun, verschlüsseln Sie den lokalen Speicher mit dem Benutzer "pin" und speichern Sie dann einen Hash der PIN für die Offline-Authentifizierung ... Aus einer ADAL-Perspektive möchte ich nur wissen, ob dort ist ein Weg, um es "zu fälschen" in Bezug auf den Benutzer angemeldet und so, wenn es online ist ... Ich habe einige Dinge rund um mit DisplayCall gelesen .. Das funktioniert jedoch nur, wenn Sie den Kontext haben, auf den Sie keinen Zugriff haben über das adal-eckige Modul in eckig. –

+0

Immer noch ein kleines Problem, aber ich kann mit DisplayCall sprechen. Mit dem displayCall übergeben Sie die Kontrolle an die App, wenn Sie login() aufrufen, bevor Sie eine Auth-Anfrage umleiten und auslösen. Im Grunde werden Sie einen Rückruf bereitstellen, und ADAL.js wird es tun und kurz vor dem Starten der Anfrage anhalten und Ihrer App die erstellte Authentifizierungs-URL übergeben. Ihre App kann dann ein beliebiges Stück davon modifizieren/anhängen/löschen und dann die Anfrage von Hand beenden. [Checkout dieses GitHub-Problem] (https: // github.com/AzureAD/azure-activedirectory-library-for-js/issues/462) für zu konfigurierende Code-Schritte. –

Antwort

0

In ADAL.js ist nichts zur Unterstützung von Offline-Szenarien vorgesehen.

ADAL wird verwendet, um im verbundenen Fall ein Zugriffstoken für eine Web-API abzurufen. Es gibt keinen Mechanismus zum Sichern eines lokalen Datenspeichers/Caches mit einem Token.

+0

Ich weiß, dass es nicht lokalen Cache versteht .. Ich denke, meine Frage war nicht klar genug .. Ich fragte mich, ob es eine Möglichkeit gibt, "außer Kraft zu setzen "sein Verhalten, wenn der Browser offline ist, so dass ich manuell (über meinen eigenen Prozess) den Benutzer als angemeldet markieren kann ... Ignoriere die lokale Cache-Seite der Geschichte. –

0

Ok, also die richtige Antwort ist definitiv config.displayCall zu verwenden. Allerdings wird displayCall während app.config mit adal-eckigen konfiguriert, was es ziemlich unmöglich macht, in eckigen wirklich zu verwenden .. Also hier sind ein paar Code zwickt Sie hinzufügen können, um Winkel Adal-so, dass Sie auch die Kontrolle übernehmen kann (wenn Sie benötigen) ..

1) die folgende var/Funktion in Ihrem Provider hinzufügen (ich habe es um die Linie 48)

var internalDisplayCall = function (url) { 
       if (userDefinedDisplayCall) { 
        userDefinedDisplayCall(url); 
       } else { 
        if (_adal.popUp) { 
         _adal._loginPopup(url); 
        } 
        else { 
         _adal.promptUser(url); 
        } 
       } 
     } 

Das ist so ziemlich die gleiche Logik wie in Bezug auf, ob es eine DisplayCall-Methode gibt oder nicht.

2) eine var für userDefinedDisplayCall um die gleiche Fläche

var userDefinedDisplayCall = undefined; 

3) fügen Sie den Kontext benötigt, weil es keine „durchfallen“ Verhalten displayCall ist das Standardverhalten in adal zu verwenden (oder in meinem Kopie davon, wie sich adal verhält. Fügen Sie das also Ihrem Provider im zurückgegebenen Objekt hinzu. (Ich tat dies, um die Linie 390)

context: _adal, 

4) fügen Sie eine Methode Methode zu setzen userDefinedDisplayCall und fügt hinzu, dass zu Ihrer Rückkehr Objekt als auch .. Ich habe das inline im Rück Objekt, also wieder um die Linie 390

setDisplayCall: function (newDisplayCall) { 
         if (newDisplayCall && typeof newDisplayCall !== 'function') { 
          throw new Error('displayCall is not a function'); 
         } 
         userDefinedDisplayCall = newDisplayCall; 
        } 

Gerade jetzt können Sie Ihre adalServiceProvider in app.config mit azur AD Mieter, Ihre appId, konfigurieren und alles, was Jazz erforderlich, dann können Sie adalService in app.run injizieren und die displayCall konfigurieren, so können Sie Ihre injizieren eigenes Verhalten ...

Verwandte Themen