2017-04-06 4 views
0

Ich habe meine Ionic/angular 2 App, die auf localhost:8000 ausgeführt wird Die App wird schließlich auf der Browser-Plattform ausgeführt werden. Die App ruft eine RESTFull-API auf, die auf meinem lokalen Rechner unter https://adawy/api gehostet wird, wobei adawy mein Hostname ist und sowohl in der Datei hosts als auch in virtuellen Hosts definiert ist. Die Serverseite ist Slim 3.Wie schützt man JWT gegen XSRF mit HTTPOnly Cookies?

Die API bei der Authentifizierung gibt eine JWT zurück, die mit allen Anforderungen verwendet werden soll.

Mein Ziel ist es, das Token vor Cross Site Request Forgery und Cross Site Scripting zu schützen. Das Speichern des Tokens in einer JavaScript-Variablen oder in einer beliebigen Form von lokalem Speicher würde den JWT über JavaScript zugänglich machen.

Ich fand, dass der beste Weg ist, die JWT als HTTPOnly Cookie zurückzugeben. So wird es nicht von Javascript zugänglich sein und würde nur vom Browser mit allen bevorstehenden Anfragen an adawy Domain gesendet werden.

Ich hatte das Token erfolgreich als Cookie zurückgegeben, aber das Problem ist, dass der Cookie nicht mit den nächsten XHR-Anfragen gesendet wird. enter image description here

Auch kann ich den Cookie in den Cookies Abschnitt in Devtools nicht sehen.

enter image description here

Ich weiß, dass Winkel in einer solchen Angelegenheit durch die Suche nach XSRF-TOKEN Cookie unterstützen kann. Es funktioniert auch nicht, wie Sie sehen können, ich den Namen des Cookies auf XSRF-TOKEN setzen, aber noch, mit jeder anderen Anfrage wird dieser Cookie nicht gesendet.

Ich frage mich, wie dies gesichert wäre, als ob eckig Zugriff auf diesen Cookie hat, also würde jedes andere Skript?

Hier ist die nächste Anfrage, ohne Cookie gesendet. Bitte ignorieren Sie die Kopfzeile Authorization, da mein Winkelcode es direkt setzt.

enter image description here

In meinem Winkel app, ich bin Einstellung der withCredentials: true Option, während die Anforderung letzten get machen.

Update Ich hatte adawy.com verwendet und ich habe immer noch das gleiche Problem.

Antwort

1

Die erste Antwort versucht, den Cookie explizit auf einer Domäne der obersten Ebene Domain=.adawy; (siehe Set-Cookie Header), die nicht zulässig ist. Versuchen Sie, es ohne die Domain zu setzen, wenn Sie können und sehen, ob das funktioniert. Versuchen Sie alternativ, einen Hostnamen zu verwenden, der eine Tld enthält.

+0

Danke für Ihre Antwort. Ich änderte die Domain zu "adawy, com" und ich habe immer noch das gleiche Problem. –

+0

[Chrome unterstützt keine CORS-Ausnahmen für Anforderungen, die von localhost stammen] (http://stackoverflow.com/questions/10883211/deadly-cors-when-http-localhost-is-the-origin). Sieht aus wie [dieses Problem wurde im Jahr 2014 als nicht behoben] geschlossen (https://bugs.chromium.org/p/chromium/issues/detail?id=67743). Anscheinend wird 'Access-Control-Allow-Origin: *' für localhost funktionieren, so dass Sie Tests durchführen können, aber 'localhost' ist ein No-Go. – LinuxDisciple

+0

Ich stolperte über diese Frage, das ist der Grund, warum ich 'adawy.com' als Hostname verwende. Ich denke, ich muss etwas falsch mit meinem Cookie Setup selbst haben. Aber ich bin nicht in der Lage, das herauszufinden. –

Verwandte Themen