Tecniche di autenticazione API Web


26

Abbiamo un framework di servizi Web asp.net MVC per la distribuzione di xml / json per le persone Ricevi richieste, ma stiamo facendo fatica a trovare il modo migliore (veloce, facile, banale per gli utenti che codificano con i linguaggi javascript o OO) per autenticare gli utenti. Non è che i nostri dati siano sensibili o altro, vogliamo solo che gli utenti si registrino in modo da poter avere il loro indirizzo e-mail per avvisarli delle modifiche e tenere traccia dell'utilizzo.

Nel nostro precedente tentativo avevamo il nome utente nell'URI e ci saremmo assicurati che il nome utente esistesse e incrementare le tabelle db con l'uso. Questo è stato super semplice ma noteremmo persone che usano demo come nome utente, ecc. Quindi abbiamo bisogno che sia un po 'più sofisticato.

Quali tecniche di autenticazione sono disponibili? Cosa usano / fanno i principali giocatori.


Cosa consideri un "protagonista"? Elenca alcuni esempi. Mentre ci sei, ti preghiamo di includere un link alle definizioni dell'API "player principale" in modo che possiamo vedere cosa fanno.
S.Lott

considererei il twitter / facebook / google / sfarfallio i principali attori. developers.facebook.com apiwiki.twitter.com
Steve

Risposte:


10

Ho fatto questa domanda su StackOverflow e puoi leggerlo qui . Vedi anche la mia risposta alla mia domanda. Che si tratta di autenticazione precisamente senza dover passare la password per ogni richiesta e senza SSL o crittografia. Solo un semplice hashing.


non sono sicuro che mi piace la tua soluzione.
Steve,

Steve: usa la soluzione Flickr

esiste una soluzione di sfarfallio open source o devo solo leggere il loro API e capirlo?
Steve,

Leggi la loro API, è molto semplice. Non sicuro come il mio metodo se non si dispone di SSL, ma molto buono

La tua soluzione md5 non sembra adatta al conto con "banale per gli utenti javascript". Dovrò controllare ancora l'API di flickr. L'ho guardato ma ho bisogno di studiare un po 'della terminologia. Principalmente cosa sono i frob.
Steve

3

Questo video è un modo interessante di usare una chiave API con il tuo servizio WCF / REST. codice .


questa è la stessa idea di mettere il nome utente nel servizio tranne per il fatto che lo chiamano una chiave API. Qualcuno può guardare l'origine della pagina se javascript e copiare la chiave e usarla altrove dove. Desideri che una chiave API sia collegata a un dominio chiamante in modo che la chiave API sia valida e provenga da xyz.com?
Steve,

anche questo è un duplicato di quanto suggerito da @KinGBin?
Steve,

0

Suppongo che tu usi Visual Studio. Se si utilizza vs 2010 con framework 4.0, è possibile controllare il modello "Servizio REST WCF con verifica chiave API" in vs 2010.


1
Dovrò esaminarlo. Mi piacerebbe allontanarmi da WCF anche se personalmente.
Steve,

Questo è stato interessante, ma sembra che passi l'APIKey nella stringa della query. Ciò non significa che la chiave API sia visibile a chiunque tra il chiamante e il chiamante, anche se si utilizza SSL?
JMarsch,

0

Uso sempre l'autenticazione HTTP per i servizi Web. L'autenticazione stessa sarebbe gestita dal tuo server web, probabilmente IIS nel tuo caso. Configureresti quindi IIS per l'autenticazione con il tuo database, un archivio LDAP o simile.

Dovresti quindi accedere al nome utente tramite la proprietà User.Identity.Name

EDIT : esempio di autenticazione 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;
}

come faresti con un client javascript?
Steve,

client = new XMLHttpRequest (); client.open (metodo, url, asincrono, utente, password);
ewindisch,

aggiunto esempio jquery per rispondere
ewindisch

1
quindi la combinazione password nome utente dovrebbe risiedere in testo semplice nell'origine. non sembra una buona idea.
Steve

1
ok, quindi in pratica dovresti inserire il tuo nome utente / password in una schermata di accesso per disattivare una richiesta API? Questa soluzione è terribile. Ogni utente di un sito Web pubblico dovrebbe essere registrato?
Steve
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.