2015-01-20 22 views
5

Prima di pubblicare questa domanda ho passato la maggior parte delle domande di overflow dello stack, ma io non ho avuto rispostaLa richiesta è stata reindirizzata a "https: //..com/site/login?", Che non è consentita per le richieste di origine incrociata che richiedono il preflight

sto provando ad accedere a un client api che eseguirà l'autenticazione Oauth così quando chiamo l'api dovrebbe lanciare una finestra popup per l'autenticazione simile a fb auth, ma sto finendo con l'errore nella mia console di cromo come sotto

XMLHttpRequest non può caricare https://api.springrole.com/authorize?
scope = XXXX & redirect_uri = http://localhost:8080/CheckRest/springrole.html&response_type=XXXX&client_id=XXXXXXXX. La richiesta è stata reindirizzata a 'https://springrole.com/site/login?api_login=1&scope=XXXX&state=&error=invalid_request', , che non è consentito per le richieste di origine incrociata che richiedono il preflight.

Ho appena mascherato alcuni valori con XXX per motivi di sicurezza. e il mio req si presenta come di seguito

$http({ 
     method : 'GET', 

     url : url, 
     headers : { 
      'Content-Type' : 'application/json', 
       "Access-Control-Allow-Origin": "https://api.springrole.com", 
       "Access-Control-Allow-Methods":"GET", 
        "Access-Control-Allow-Credentials": true 
     } 
    }).success(function(data, status, headers, config) { 
     $scope.details.response = JSON.stringify(data); 

     console.log("success" + data) 
    }) 

se rimuovere le intestazioni nella richiesta sto ottenendo l'errore sotto mostrato

'Access-Control-Allow-Origin' Nessuna intestazione è presente sulla richiesta risorsa. L'origine 'http://localhost:8080' non è quindi consentita l'accesso .

qualsiasi suggerimento o soluzione sarà apprezzato.

+0

Si suppone che le intestazioni di controllo degli accessi vengano aggiunte automaticamente dal browser anziché impostate esplicitamente dall'utente. Hai provato a rimuoverli? –

+0

@MichaelAaronSafyan se li rimuovo ho il seguente errore Nessuna intestazione 'Access-Control-Allow-Origin' è presente sulla risorsa richiesta. L'origine 'http: // localhost: 8080' non è quindi consentita l'accesso. –

+0

Questo metodo di aggiunta del lato client dell'intestazione è interessante. In genere, ho visto l'intestazione 'Access-Control-Allow-Origin' sul lato server per controllare l'accesso a una determinata risorsa ... – War10ck

risposta

2

Sì, si sta eseguendo il Same Origin Policy che è in atto per motivi di sicurezza. In poche parole, in pratica stai richiedendo/aprendo qualcosa da un'origine diversa che non è molto sicura. Se lo desideri, puoi disattivarlo temporaneamente in Chrome aggiungendo l'argomento --disable-web-security.

Così dal Terminal è possibile eseguire

open -a Google\ Chrome --args --disable-web-security

lo faccio spesso così ho finito per l'aggiunta e l'alias al mio .bash_profile in modo da poter accedere facilmente

# Run Insecure Chrome 
alias insecure-chrome='open -a Google\ Chrome --args --disable-web-security' 

Poi, nel Terminal Posso solo chiamare insecure-chrome e Chrome apparirà. Saprai che ha funzionato se vedi l'avviso di sicurezza in alto. L'avvertimento si presenta così

enter image description here

E naturalmente avvertimento obbligatorio fare attenzione quando si fa questo. Non navigare sul Web in questa modalità, ma lavorando localmente dovresti stare bene.

Per gli utenti Windows è possibile passare alla cartella in cui è installato Chrome e impostare

chrome.exe --user-data-dir = "C:/temp" --disable-web-security

Assicurati di chiudere tutte le istanze di Chrome prima di farlo, altrimenti non funzionerà.

Problemi correlati