2016-06-22 15 views
0

Ich habe Angular + Spring App und ich versuche, Dienste mit JWT-Tokens zu authentifizieren.JWT-Token-Authentifizierung für direkte URL-Treffer im Browser

In JWT-Authentifizierung Ich speichere Token in localStorage und Anhängen Token in der Autorisierung HTTP-Header einer jeden Anfrage. Dies kann durch Schreiben eines Interzeptors in AngularJs erfolgen. Ich habe this Tutorial gefolgt.

Jetzt ist meine Frage:
Wie kann ich Anfragen direkt durch das Treffen der URL im Browser authentifizieren?

Wenn Sie die Url zu diesem Zeitpunkt keine Seite geladen und kein Skript URL von LocalStorage mit Authentifizierung Header zu binden. Daher wird der Server die Anfrage letztendlich ablehnen und 401 senden, auch wenn der Benutzer zuvor authentifiziert wurde.

+0

wenn der Kopf Wenn Cookies direkt auf eine URL übertragen werden, bieten nur Cookies eine rein automatisierte Möglichkeit zur Ankündigung, dass Ihr Client authentifiziert ist. Könnte Ihr Server eine benutzerdefinierte Antwort 401/Unauthorized bereitstellen, die mit der versuchten URL injiziert wurde, die den JWT aus localStorage zieht und die Anfrage stellt? Es ist nicht der effizienteste Ansatz. – amoebob

+0

Ich glaube, ich kann der Anfrage, die ich im Browser getroffen habe, keinen Header hinzufügen. – pratik

+0

Auch wenn es mir gelingt, die versuchte URL mit 401 Antwort zu injizieren und holen Sie die JWT heraus, aber danach .. wie Kopfzeile zu neuen Seite Anfrage hinzufügen (nicht Ajax Anfrage)? Ich denke, es ist nicht möglich nach [dieser] (http://stackoverflow.com/questions/24130004/adding-http-headers-to-window-location-href-in-angular-app?answertab=active#tab-top) Konversation. – pratik

Antwort

1

Für Web-Ressourcen wie Videos, Bilder oder Dokumente, die direkt durch den Browser geladen werden müssen, fügen Sie die URL einen Parameter mit JWT (Sie können nicht Header gesetzt) ​​

path/to/resource?jwt=... 

Auf Server-Seite, dekodieren die uRL der Suche nach jwt wenn Fall Authentication Header

Bei eingehenden Links nicht vorhanden war, die Sie nicht erstellt haben, zum Beispiel von einer Suchmaschine,

1) accept the link and redirect user to login page with a cookie/field set to the destination page 
    2) automatically, login user with JWT from local storage set in header in the usual way 
    3) if it is succesful, redirect to the destination 
+0

Nach Ihrem Ansatz muss ich zwei Bedingungen auf der Serverseite schreiben 1) Überprüfen Sie die JWT in der Kopfzeile -> wenn es vorhanden und gültig ist -> Benutzer authentifiziert 2) Wenn nicht in der Kopfzeile vorhanden -> auf URL überprüfen Parameter von jwt -> wenn es vorhanden und gültig ist -> Benutzer ist authentifiziert .. bin ich richtig? – pratik

+0

Ja, Sie haben Recht – pedrofb