2014-12-19 13 views
6

Miałem nadzieję uzyskać pewne zalecenia dotyczące podejścia do przekierowywania użytkowników z HTTP do HTTPS przy użyciu inicjalizatora ember z ember-simple-auth.Przekierowanie z HTTP do HTTPS w/Simple 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` 

Wygląda jednak na to, że plik cookie zostaje unieważniony, nawet jeśli wyrażenie if jest prawdziwe. Próbowałem kilka rzeczy, w tym:

  • wcześniej: 'simple-auth'
  • wcześniej: 'sklepu'
  • application.destroy() wewnątrz if, przed window.location.href jest ustawiony:

Z tego, co mogę powiedzieć, po debugowaniu. Aplikacja przekierowuje do HTTPS, ale wtedy plik cookieName nie znajduje się w pliku document.cookie. (https://github.com/simplabs/ember-simple-auth/blob/master/packages/ember-simple-auth-cookie-store/lib/simple-auth-cookie-store/stores/cookie.js#L154)

Zanim ta metoda zadziałała, ponieważ mieliśmy prosty fragment w index.html, ale w/CSP chcielibyśmy zachować go w inicjalizatorze. Wszelkie zalecenia?

Dzięki!

+0

Dlaczego chcesz to zrobić w inicjalizatorze, a nie w serwerze? Nie wiadomo, czy korzystasz z autoryzacji, ale jeśli nie jesteś, serwer nie może odpowiadać na żadne żądania niezwiązane z HTTPS. – marcoow

+0

Wszystkie zasoby są dostarczane w CDN z różnymi usługami AWS (S3, Route53, etc ...), więc nie mamy tak naprawdę konfiguracji nginx lub apache, której możemy użyć. – alvincrespo

+0

Tak, interfejs użytkownika po prostu komunikuje się z interfejsem API, więc hostowanie zasobów frontendu odbywa się właśnie za pośrednictwem CDN. – alvincrespo

Odpowiedz

4

Naprawdę powinieneś wymuszać przekierowanie z HTTP na HTTPS z serwera, ponieważ wykonanie go z klienta nie dodaje żadnych prawdziwych zabezpieczeń.

Pomyślcie o tym, użytkownik pobrał aplikację do przeglądarki z niezabezpieczonego punktu końcowego i od tej pory nic nie można zaufać. Nawet przekierowanie oparte na serwerze jest problematyczne, ponieważ opiera się na przekierowaniu z niezaufanego punktu końcowego. Użytkownicy powinni mieć dostęp do rzeczy z początkowego zaufanego punktu startowego, w przeciwnym razie wszystkie zakłady są wyłączone. Jest to tak zwany problem ze skierowaniem i prawdopodobnie nigdy nie zostanie rozwiązany z powodu modelu biznesowego za certyfikatami SSL.

Nie powinieneś także ufać ciasteczkom z niezaufanej domeny HTTP w zaufanej domenie HTTPS, chyba że masz możliwość uwierzytelnienia plików cookie na kliencie. Udostępnianie plików cookie między HTTP/HTTPS jest opisane w RFC 2109 (punkt 4.2.2 Składnia plików cookie).

To znaczy:

  • Zestaw ciasteczka z „Secure” będą dostępne tylko na HTTPS
  • Zestaw ciasteczka bez „Secure” będzie dostępny na HTTP lub HTTPS.
Powiązane problemy