2016-02-28 17 views
7

Contestorichieste HTTPS con l'autorizzazione non funziona tramite Safari

richieste XHR con intestazione di autorizzazione tramite HTTPS (entrambi insieme) non raggiungere il server, utilizzando Safari (IOS e Mac OS). Funziona con IE, Chrome e Firefox.

Uso un certificato valido generato da Letsencrypt e i browser non visualizzano avvisi su di esso.

Nell'ispettore web di Safari, questi XHR cercano di ottenere risultati fino al timeout e nessun errore visualizzato.

Ho un dominio e nessun sottodominio.

prova

  • intestazione di autorizzazione + HTTPS => Non funziona
  • Autorizzazione intestazione + No HTTPS (HTTP) => Opere
  • Nessuna intestazione autorizzazione + HTTPS => Opere

Codice

Uso un intercettore per impostare l'intestazione di autorizzazione.

this.request = (config) => { 
    config.headers = config.headers || {}; 
    var authData = localStorageService.get('authorizationData'); 
    if (authData && config.url && !config.url.endsWith("/token")) { 
     config.headers = { 
      "Authorization": 'Bearer ' + authData.access_token 
     }; 
     config.withCredentials = true; 
    } 
    return config; 
} 

Qualcuno ha riscontrato gli stessi problemi?

UPDATE 1

C'è qualcosa che non va con Safari + HTTPS + "Autorizzazione" intestazione. Se rinominare "Autorizzazione" con "MyHeader" e apportando qualche modifica sul server per recuperare il mio token bearer con il token "MyHeader", tutto funziona correttamente.

L'intestazione "Autorizzazione" è una parola protetta che utilizza HTTPS in Safari?

+1

Hai mai stabilito se l'autorizzazione era una parola protetta su Safari? –

+0

Non ho trovato nulla sulle parole protette su Safari. –

+0

Abbiamo scoperto quale fosse il problema per noi. Se si tenta di utilizzare Safari su un certificato non sicuro (autofirmato è stato il colpevole per noi), Safari non consente di modificare il campo dell'intestazione Autorizzazione. La nostra soluzione era di fidarsi del certificato autofirmato o di passare al normale http (entrambe le soluzioni funzionavano). Mi sembra che il tuo problema fosse diverso, anche se –

risposta

5

Ho anche affrontato un problema simile con Safari in cui "Autorizzazione" nell'intestazione non è stato inviato nella richiesta GET ma è finito in una cosa semplice.

Ho semplicemente aggiunto un '/' alla fine dell'URL della richiesta e ha funzionato per me.

per es .: modifica URL da '/ token' a '/ token /'.

Problemi correlati