2014-12-19 13 views
6

Ich hoffte, einige Empfehlungen zu erhalten, wie man die Umleitung von Benutzern von HTTP zu HTTPS mit einem Ember-Initialisierer mit ember-simple-auth nähern kann.Umleiten von HTTP zu HTTPS w/Einfache Auth

`import ENV from 'cio/config/environment'` 

SSLInitializer = 
    name: 'ssl' 
    before: 'simple-auth-cookie-store' 
    initialize: (container, application) -> 
    application.deferReadiness() 

    # Redirect if hitting HTTP and SSL is enabled 
    if ENV.SSL and window.location.protocol is "http:" 
     window.location.href = "https:" + window.location.href.substring(window.location.protocol.length) 
     return false 

    application.advanceReadiness() 

`export default SSLInitializer` 

Aber es scheint, dass der Cookie ungültig wird, selbst wenn die if-Anweisung als wahr ausgewertet wird. Ich habe einige Dinge ausprobiert, darunter:

  • vor: 'simple-Auth'
  • vor: 'Store'
  • application.destroy() innerhalb der if-Anweisung vor der window.location.href ist gesetzt

Von was ich sagen kann, nach dem Debuggen. Die App leitet zwar zu HTTPS um, aber der Cookie-Name wurde in document.cookie nicht gefunden. (https://github.com/simplabs/ember-simple-auth/blob/master/packages/ember-simple-auth-cookie-store/lib/simple-auth-cookie-store/stores/cookie.js#L154)

Bevor diese Methode funktionierte, weil wir ein einfaches Snippet in der index.html hatten, aber mit CSP wollten wir es in einem Initialisierer behalten. Irgendwelche Empfehlungen?

Danke!

+0

Warum möchten Sie dies in einem Initialisierer und nicht vom Server tun? Ich weiß nicht, ob Sie einen Authorizer verwenden, aber wenn Sie der Server ist, muss er auf keine Nicht-HTTPS-Anfragen reagieren. – marcoow

+0

Alle Assets werden in einem CDN mit einer Vielzahl von AWS-Diensten (S3, Route53, etc ...) bereitgestellt, so dass wir nicht wirklich eine Nginx- oder Apache-Konfiguration verwenden können, die wir verwenden können. – alvincrespo

+0

Ja, die Benutzeroberfläche kommuniziert nur mit einer API, so dass das Hosting von Frontend-Assets nur über ein CDN bedient wird. – alvincrespo

Antwort

4

Sie sollten wirklich eine Umleitung von HTTP zu HTTPS vom Server erzwingen, da es vom Client keine echte Sicherheit hinzufügt.

Denken Sie daran, der Benutzer hat die Anwendung von einem unsicheren Endpunkt in ihren Browser heruntergeladen, und von nun an kann nichts mehr vertraut werden. Selbst eine serverbasierte Umleitung ist problematisch, da sie auf dem Umleitungshinweis von einem nicht vertrauenswürdigen Endpunkt beruht. Benutzer sollten wirklich auf Dinge von einem anfänglichen vertrauenswürdigen Ausgangspunkt zugreifen, ansonsten sind alle Wetten ungültig. Dies ist bekannt als das sichere Empfehlungsproblem und wird wahrscheinlich nie aufgrund des Geschäftsmodells hinter SSL-Zertifikaten gelöst werden.

Sie sollten Cookies aus der nicht vertrauenswürdigen HTTP-Domäne in der vertrauenswürdigen HTTPS-Domäne auch nicht wirklich vertrauen, es sei denn, Sie haben die Möglichkeit, diese Cookies auf dem Client zu authentifizieren. Das Teilen von Cookies zwischen HTTP/HTTPS wird in RFC 2109 behandelt (Abschnitt 4.2.2 Set-Cookie-Syntax).

Das bedeutet:

  • Ein Cookie-Set mit "Secure" wird nur auf HTTPS
  • Ein Cookie Satz ohne "Secure" wird auf HTTP oder HTTPS verfügbar sein.
Verwandte Themen