2011-01-06 15 views
7

Z jQuery dzwonię pod numer Version One Rest API i potrzebuję uwierzytelnienia użytkownika w nagłówku HTTP.Uwierzytelnianie HTTP jQuery

Próbowałem

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

i

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

ale zawsze pojawiają się pytania o moich mandatów (używam Chrome). Nawet po wpisaniu poświadczeń w oknie podręcznym nie jestem uwierzytelniany i okno jest wyświetlane.

  1. Jak uwierzytelnić użytkownika za pomocą jQuery w nagłówkach HTTP?
  2. Czy istnieje sposób, w jaki sposób zaszyfrować atrybut hasła niewidoczny? Lub Base64 to jedyny sposób. Chcę uzyskać dostęp do serwera za pośrednictwem tylko jednego konta, ale nie chcę, aby użytkownicy po stronie klienta widzieli hasło (lub znajdowali je w javascriptach).
+0

"Chcę uzyskać dostęp do serwera za pośrednictwem tylko jednego konta, ale nie chcę, aby użytkownicy po stronie klienta widzieli hasło" - to będzie niemożliwe z tą metodą, chyba że pobierzesz hasło ze strony serwera (co wydaje się złe ćwiczyć). Kodowanie Base64 NIE jest sposobem na niewidoczne hasło, łatwo je cofnąć. –

+0

Dzięki. Obawiałem się, że to niemożliwe. Zgadza się z Base64. – padis

Odpowiedz

4

To nie jest dokładnie niemożliwe, tylko trochę niezręczne. Możesz zaimplementować proxy AJAX przez swój własny serwer:

  • Twoja JavaScript łączy się z Twoim serwerem przez AJAX.
  • Twój serwer ustawia żądanie na https://www10.v1host.com/.../VersionOne/rest-1.v1/... z odpowiednimi podstawowymi nagłówkami autoryzacji (lub innym uwierzytelnieniem, którego potrzebujesz użyć).
  • Twój serwer wysyła odpowiedź z powrotem do skryptu dokładnie tak, jak www10.v1host.com wysłała go na twój serwer.

W ten sposób hasło pozostaje niewidoczne i pod Twoją kontrolą na serwerze, a kod klienta otrzymuje ten sam interfejs API, co od www10.v1host.com. Wprowadzanie takiego podejścia może trochę opóźnić, ale powinno być możliwe do opanowania.

Oczywiście nadal musisz wziąć pod uwagę proces autoryzacji między przeglądarką a serwerem, ale powinieneś być w stanie użyć wszelkich autoryzacji, które już posiadasz (prawdopodobnie ciasteczka i zwykłe stare loginy).

Będziesz także chciał sprawdzić tę technikę za pomocą warunków korzystania z interfejsu API, aby upewnić się, że grasz dobrze.

+0

Dzięki, to świetny pomysł. Właściwie chciałem pierwotnie nazwać to REST API przez Javę po stronie serwera, ale serwer działa na komputerze, który nie może dostać się do zewnętrznej sieci. Maszyny klienckie mogą wyjść na zewnątrz. – padis

Powiązane problemy