2011-01-06 28 views
7

Con jQuery llamo al Version One Rest API y necesito autenticar al usuario en el encabezado HTTP.jQuery autenticación HTTP

me trataron

$.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."); 
     } 
    }); 

y

$.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."); 
    } 
}); 

Pero siempre me pop-up preguntando por mis credenciales (yo uso Chrome). Incluso cuando escribo las credenciales en la ventana emergente, no estoy autenticado y la ventana sigue apareciendo.

  1. Cómo autenticar al usuario con jQuery en los encabezados HTTP?
  2. ¿Hay alguna manera de hacer invisible el atributo de contraseña cifrado? O Base64 es la única forma. Quiero acceder al servidor a través de una sola cuenta, pero no quiero que los usuarios del lado del cliente vean la contraseña (o la encuentren en javascripts).
+0

"Quiero acceder al servidor a través de una sola cuenta pero no quiero que los usuarios del lado del cliente vean la contraseña" - esto será imposible con este método a menos que recuperes la contraseña del servidor (lo cual es malo práctica). La codificación Base64 NO es una forma de hacer que una contraseña sea invisible, es infantilmente fácil de revertir. –

+0

Gracias. Tenía miedo de que esto sea imposible. Eso es correcto sobre Base64, de acuerdo. – padis

Respuesta

4

Esto no es exactamente imposible, solo un poco incómodo. Puede proxy todo el AJAX a través de su propio servidor como este:

  • Su JavaScript se pone en contacto con su servidor a través de AJAX.
  • Su servidor configura la solicitud al https://www10.v1host.com/.../VersionOne/rest-1.v1/... con los encabezados de autenticación básicos adecuados (o la autenticación que necesite usar).
  • Su servidor devuelve la respuesta a su script exactamente como www10.v1host.com lo envió a su servidor.

De esta manera, la contraseña permanece invisible y bajo su control en el servidor y el código del cliente obtiene la misma API que desde www10.v1host.com. Puede haber un poco de retraso introducido con este enfoque, pero eso debería ser manejable.

Por supuesto, aún debe considerar el proceso de autorización entre el navegador y su servidor, pero debería poder usar la autorización que ya tenga para eso (probablemente las cookies y los antiguos inicios de sesión simples).

También querrás comprobar esta técnica en función de los términos de servicio de la API para asegurarte de que juegas bien.

+0

Gracias, esa es una gran idea. En realidad, originalmente quería llamar a esa API REST a través de Java en el lado del servidor, pero el servidor se ejecuta en la máquina que no puede acceder a la red externa. Las máquinas del cliente pueden salir. – padis

Cuestiones relacionadas