2015-06-29 16 views
6

Dies ist mein Setup:Shop JWT Token in Cookie

  • 1 Authentifizierungsserver, der JWT-Token-Authentifizierung auf erfolgreiche gibt aus.
  • Mehrere API-Ressourcenserver, die Informationen bereitstellen (wenn der Benutzer authentifiziert ist).

Jetzt möchte ich mein ASP.NET MVC Frontend bauen. Ist es in Ordnung, das Token, das ich nach der Authentifizierung erhalte, zu nehmen und in einen Cookie zu legen, damit ich mit jedem gesicherten Anruf darauf zugreifen kann? Ich verwende die RestSharp-DLL, um meine http-Aufrufe auszuführen. Wenn es einen Sicherheitsfehler gibt, wo sollte ich meinen Token speichern?

würde ich diesen Code für das Cookie verwenden:

  System.Web.HttpContext.Current.Response.Cookies.Add(new System.Web.HttpCookie("Token") 
     { 
      Value = token.access_token, 
      HttpOnly = true 
     }); 
+0

stellen Sie sicher, dass es auch HTTPS ist nur durch das Hinzufügen der Secure-Flag! – Tilo

+0

[Antwort] (http://stackoverflow.com/a/40376819/204699) zu verwandten Frage, wo Token in Browser-Apps gespeichert werden kann nützliche Zusatzinformationen enthalten. –

Antwort

8

Sie sind auf dem richtigen Weg! Der Cookie sollte immer das Flag HttpOnly haben. Wenn Sie dieses Flag setzen, wird verhindert, dass die JavaScript-Umgebung (im Webbrowser) auf den Cookie zugreift. Dies ist der beste Weg, um XSS-Angriffe im Browser zu verhindern.

Sie sollten auch das Flag Secure in der Produktion verwenden, um sicherzustellen, dass der Cookie nur über HTTPS gesendet wird.

Sie müssen auch verhindern, CSRF Angriffe. Dies geschieht in der Regel durch Setzen eines Wertes in einem anderen Cookie, der bei jeder Anfrage angegeben werden muss.

Ich arbeite bei Stormpath und wir haben eine Menge Informationen über Front-End-Sicherheit geschrieben. Diese beiden Beiträge kann hilfreich sein für das Verständnis aller Facetten:

Token Based Authentication for Single Page Apps (SPAs)

https://stormpath.com/blog/build-secure-user-interfaces-using-jwts/

+0

Cool danke für die Info! – Kaizer

+2

Danke für Infos. Irgendein Plan, etwas über .NET Identity 2.0 Integration zu schreiben? –

+0

@andrea: Es ist ein spätes Follow-up, aber ich habe gerade einen Artikel über ASP.NET + Stormpath geschrieben: https://stormpath.com/blog/10-minute-asp-net-user-authentication –

0

Erhalten Sie Ihre eigene JWTs zu erzeugen?

Wenn ja, sollten Sie einen Signaturalgorithmus verwenden, der auf asymetrischer Verschlüsselung basiert, wie "RS256" oder "RS512" - so können Sie die Ansprüche in Ihrer Clientanwendung verifizieren, ohne das private Geheimnis zu teilen.

Müssen Sie die JWT wirklich in den Cookie übertragen?

Es könnte sicherer sein, einfach eine zufällige ID in Ihr Cookie zu setzen, das auf das JWT-Zugriffstoken verweist, und auf dem Server, der Ihre Web-App bedient, die de-referenzierende Magie anzuwenden.

+0

könnten Sie einige zur Verfügung stellen code, wie speichert man jwt in cookie, bitte, nehme 'string token = YOUR_TOKEN', und du codierst in der startup-klasse – sepehr