Techniki uwierzytelniania interfejsu API sieci Web

26

Mamy platformę usług sieciowych asp.net MVC do obsługi xml / json dla ludzi. Otrzymuj żądania, ale staramy się znaleźć najlepszy sposób (szybki, łatwy, trywialny dla użytkowników kodujących w języku javascript lub OO) w celu uwierzytelnienia użytkowników. Nie chodzi o to, że nasze dane są wrażliwe lub cokolwiek innego, po prostu chcemy, aby użytkownicy się zarejestrowali, abyśmy mogli mieć ich adres e-mail, aby powiadamiać ich o zmianach i śledzić użycie.

W naszej poprzedniej próbie mieliśmy nazwę użytkownika w URI i upewniliśmy się, że nazwa użytkownika istnieje, i zwiększaliśmy tabele db wraz z użyciem. To było bardzo proste, ale zauważylibyśmy, że ludzie używają wersji demo jako nazwy użytkownika itp., Więc musimy być nieco bardziej wyrafinowani.

Jakie techniki uwierzytelniania są dostępne? Czego używają / robią główni gracze.

Steve
źródło
Co uważasz za „głównego gracza”? Wymień kilka przykładów. W tym momencie dołącz link do definicji interfejsu API „głównego odtwarzacza”, abyśmy mogli zobaczyć, co robią.
S.Lott,
za głównych graczy uważam Twitter / Facebook / Google / Flicker. developers.facebook.com apiwiki.twitter.com
Steve

Odpowiedzi:

10

Zadałem to pytanie na StackOverflow i możesz je przeczytać tutaj . Zobacz także moją odpowiedź na moje pytanie. Chodzi o uwierzytelnianie dokładnie bez konieczności podawania hasła dla każdego żądania oraz bez SSL lub szyfrowania. Po prostu proste mieszanie.

Społeczność
źródło
nie jestem pewien czy podoba mi się twoje rozwiązanie.
Steve
Steve: skorzystaj z rozwiązania Flickr
czy istnieje rozwiązanie do migotania typu open source, czy muszę po prostu odczytać ich interfejs API i go rozgryźć?
Steve,
Przeczytaj ich API, to bardzo proste. Nie tak bezpieczny, jak moja metoda, jeśli nie masz SSL, ale bardzo dobrze
Twoje rozwiązanie md5 po prostu nie wydaje się pasować do „trywialnego dla użytkowników javascript”. Będę musiał jeszcze trochę sprawdzić interfejs API flickr. Spojrzałem na to, ale muszę przestudiować trochę terminologii. Głównie jakie są żaby.
Steve,
3

Ten film wideo jest interesującym sposobem używania klucza API z usługą WCF / REST. kod .

Tangurena
źródło
jest to ten sam pomysł, co umieszczenie nazwy użytkownika w usłudze, chyba że nazywają to kluczem API. Ktoś może spojrzeć na źródło strony, jeśli javascript i skopiować klucz i użyć go gdzie indziej. Czy chcesz, aby klucz API był połączony z domeną wywołującą, aby klucz API musiał być prawidłowy i pochodził z witryny xyz.com?
Steve,
jest to także kopia tego, co sugerował @KinGBin?
Steve,
0

Rozumiem, że używasz wizualnego studia. Jeśli korzystasz z frameworka w porównaniu do wersji 2010 z wersją 4.0, możesz sprawdzić szablon „Usługa REST usługi WCF z weryfikacją klucza API” w porównaniu do wersji 2010.

KinGBin
źródło
1
Będę musiał to sprawdzić. Osobiście chciałbym uciec od WCF.
Steve
Było to interesujące, ale wygląda na to, że po prostu przekazuje klucz APIK w ciągu zapytania. Czy to nie znaczy, że klucz API jest widoczny dla każdego między dzwoniącym a odbiorcą - nawet jeśli używasz SSL?
JMarsch
0

Zawsze używam uwierzytelniania HTTP do usług internetowych. Samo uwierzytelnianie będzie obsługiwane przez Twój serwer WWW, prawdopodobnie w twoim przypadku IIS. Następnie skonfigurujesz usługi IIS do uwierzytelniania w bazie danych, sklepie LDAP lub podobnym.

Następnie uzyskasz dostęp do nazwy użytkownika za pośrednictwem właściwości User.Identity.Name

EDYCJA : Przykład uwierzytelnienia JQuery:

/* I found that providing the username and password both in the
   the arguments and in the url parameter seems to have better compatibility,
   if it works well for you, it is highly advisable to remove the 
   user/pass from the url */

function doLogin (){
  $.ajax({
    username: $('#username').val(),
    password: $('#password').val(),
    url: 'https://'+$('#username').val()+':'+$('#password').val()+'@api.example.com',
    dataType: 'jsonp',
    context: $('#result'),
    success: function(d) { $(this).html(d); $(location).attr('href','https://api.example.com/success'); }
    });
    return false;
}
ewindisch
źródło
jak zrobiłbyś to z klientem javascript?
Steve,
client = new XMLHttpRequest (); client.open (metoda, adres URL, asynchronizacja, użytkownik, hasło);
ewindisch 13.01.11
dodano przykład jquery do odpowiedzi
ewindisch
1
więc kombinacja nazwy użytkownika i hasła musiałaby znajdować się w zwykłym tekście w źródle. nie wydaje się dobrym pomysłem.
Steve
1
ok, więc w zasadzie musiałbyś wpisać swoją nazwę użytkownika / hasło na ekranie logowania, aby odpalić żądanie interfejsu API? To rozwiązanie jest okropne. Każdy użytkownik publicznej witryny musiałby zostać zarejestrowany?
Steve