2011-01-06 21 views
7

Con jQuery Sto chiamando Version One Rest API e ho bisogno di autenticare l'utente nell'intestazione HTTP.jQuery Autenticazione HTTP

ho cercato

$.ajax({ 
     dataType: "jsonp", 
     beforeSend: function(xhr){ 
      xhr.setRequestHeader("Authorization", "Basic xyz"); // xyz usr:pwd Base64 encoded 
     }, 
     url: "https://www10.v1host.com/.../VersionOne/rest-1.v1/...", 
     success: function(data, status, xhr) { 
      alert("Load was performed."); 
     } 
    }); 

e

$.ajax({ 
    dataType: "jsonp", 
    username:"usr", 
    password:"pwd", 
    url: "https://www10.v1host.com/.../VersionOne/rest-1.v1/...", 
    success: function(data, status, xhr) { 
     alert("Load was performed."); 
    } 
}); 

ma ottengo sempre pop-up che chiede per le mie credenziali (io uso Chrome). Anche quando digito le credenziali nel pop-up, non sono autenticato e la finestra continua a essere visualizzata.

  1. Come autenticare l'utente con jQuery nelle intestazioni HTTP?
  2. Esiste un modo per rendere invisibile l'attributo password crittografato? Oppure Base64 è l'unico modo. Voglio accedere al server tramite un solo account ma non voglio che gli utenti sul lato client vedano la password (o la trovi in ​​javascript).
+0

"Voglio accedere al server tramite un solo account ma non voglio che gli utenti sul lato client visualizzino la password" - questo sarà impossibile con questo metodo a meno che non si recuperi la password dal lato server (che sembra un brutto pratica). La codifica Base64 NON è un modo per rendere invisibile una password, è facile ripristinarla in modo infantile. –

+0

Grazie. Avevo paura che questo fosse impossibile. È giusto su Base64, d'accordo. – padis

risposta

4

Questo non è esattamente impossibile, solo un po 'imbarazzante. È possibile eseguire il proxy di tutte le AJAX tramite il proprio server in questo modo:

  • Il tuo JavaScript contatta il tuo server tramite AJAX.
  • Il server imposta la richiesta su https://www10.v1host.com/.../VersionOne/rest-1.v1/... con le intestazioni di autenticazione di base appropriate (o qualsiasi altra autenticazione che è necessario utilizzare).
  • Il server invia la risposta al proprio script esattamente come www10.v1host.com inviato al server.

In questo modo la password rimane invisibile e sotto il vostro controllo sul server e il codice cliente ottiene la stessa API come si farebbe da www10.v1host.com. Potrebbe esserci un po 'di ritardo introdotto con questo approccio, ma dovrebbe essere gestibile.

Ovviamente, devi ancora considerare il processo di autorizzazione tra il browser e il tuo server ma dovresti essere in grado di utilizzare qualsiasi autorizzazione che hai già per quello (probabilmente cookie e semplici vecchi accessi).

Si consiglia inoltre di verificare questa tecnica in base ai termini di servizio dell'API per assicurarsi che si stia giocando bene.

+0

Grazie, è un'ottima idea. Originariamente volevo chiamare quell'API REST tramite Java sul lato server, ma il server gira sul computer che non può raggiungere la rete esterna. Le macchine client sono autorizzate ad uscire. – padis

Problemi correlati