Web-API-Authentifizierungstechniken

26

Wir haben ein ASP.NET MVC-Web-Service-Framework, mit dem Sie XML / JSON für Benutzer bereitstellen können. Sie erhalten zwar Anfragen, haben aber Schwierigkeiten, den besten Weg (schnell, einfach, trivial für Benutzer, die mit Javascript oder OO-Sprachen codieren) zu finden, um Benutzer zu authentifizieren. Es ist nicht so, dass unsere Daten vertraulich sind oder so, wir möchten nur, dass sich Benutzer registrieren, damit wir ihre E-Mail-Adresse haben, um sie über Änderungen zu informieren und die Nutzung zu verfolgen.

Bei unserem vorherigen Versuch hatten wir den Benutzernamen in der URI und stellten nur sicher, dass der Benutzername vorhanden war, und inkrementierten die DB-Tabellen mit der Verwendung. Das war super einfach, aber wir bemerkten, dass die Leute Demo als Benutzernamen usw. verwendeten, also mussten wir es etwas ausgefeilter machen.

Welche Authentifizierungstechniken stehen zur Verfügung? Was machen die Hauptakteure?

Steve
quelle
Was halten Sie für einen "Major Player"? Bitte nennen Sie einige Beispiele. Fügen Sie währenddessen einen Link zu den API-Definitionen der "Hauptakteure" hinzu, damit wir sehen können, was diese tun.
S.Lott
Ich würde das Twitter / Facebook / Google / Flimmern als die Hauptakteure betrachten. developers.facebook.com apiwiki.twitter.com
Steve

Antworten:

10

Ich habe diese Frage auf StackOverflow gestellt und Sie können sie hier lesen . Siehe auch meine Antwort auf meine Frage. Dabei geht es um die Authentifizierung, ohne dass das Kennwort für jede Anforderung übergeben werden muss, und ohne SSL oder Verschlüsselung. Nur einfaches Hashing.

Gemeinschaft
quelle
Ich bin mir nicht sicher, ob mir deine Lösung gefällt.
Steve
Steve: Flickr-Lösung verwenden
Gibt es eine Open-Source-Flicker-Lösung oder muss ich nur deren API lesen und es herausfinden?
Steve
Lesen Sie ihre API, es ist sehr einfach. Nicht so sicher wie meine Methode, wenn Sie kein SSL haben, aber sehr gut
Ihre md5-Lösung scheint einfach nicht die Rechnung mit "trivial für Javascript-Benutzer" zu passen. Ich muss die Flickr-API noch etwas genauer untersuchen. Ich warf einen Blick darauf, musste aber einige Begriffe studieren. Hauptsächlich was Frobs sind.
Steve
3

Dieses Video ist eine interessante Möglichkeit, einen API-Schlüssel mit Ihrem WCF / REST-Dienst zu verwenden. Code .

Tangurena
quelle
Dies ist die gleiche Idee wie das Einfügen des Benutzernamens in den Dienst, mit der Ausnahme, dass er als API-Schlüssel bezeichnet wird. Jemand kann sich die Quelle der Seite ansehen, wenn Javascript aktiviert ist, und den Schlüssel kopieren und an anderer Stelle verwenden. Möchten Sie, dass ein API-Schlüssel mit einer aufrufenden Domain verknüpft wird, damit der API-Schlüssel gültig ist und von xyz.com stammt?
Steve
Ist dies auch ein Duplikat dessen, was @KinGBin vorgeschlagen hat?
Steve
0

Ich nehme an, du benutzt Visual Studio. Wenn Sie vs 2010 mit 4.0-Framework verwenden, können Sie die Vorlage "WCF-REST-Service mit API-Schlüsselüberprüfung" in vs 2010 auschecken.

KinGBin
quelle
1
Ich werde das untersuchen müssen. Ich würde gerne persönlich von der WCF wegkommen.
Steve
Das war interessant, aber es sieht so aus, als ob es nur den APIKey in der Abfragezeichenfolge übergibt. Bedeutet das nicht, dass der API-Schlüssel für jeden zwischen dem Anrufer und dem Angerufenen sichtbar ist - auch wenn Sie SSL verwenden?
JMarsch
0

Ich verwende immer die HTTP-Authentifizierung für Webdienste. Die Authentifizierung selbst wird von Ihrem Webserver durchgeführt, wahrscheinlich von IIS in Ihrem Fall. Anschließend konfigurieren Sie IIS für die Authentifizierung anhand Ihrer Datenbank, eines LDAP-Speichers oder Ähnlichem.

Sie würden dann über die Eigenschaft User.Identity.Name auf den Benutzernamen zugreifen

BEARBEITEN : JQuery-Authentifizierungsbeispiel:

/* 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
quelle
Wie würden Sie dies mit einem Javascript-Client tun?
Steve
client = new XMLHttpRequest (); client.open (Methode, URL, Async, Benutzer, Passwort);
ewindisch
jquery beispiel zur
antwort
1
Die Benutzername-Passwort-Kombination müsste sich also im Klartext der Quelle befinden. scheint keine gute Idee zu sein.
Steve
1
OK, also müssten Sie im Grunde genommen Ihren Benutzernamen / Ihr Passwort in einen Anmeldebildschirm eingeben, um eine API-Anfrage auszulösen? Diese Lösung ist schrecklich. Jeder Benutzer einer öffentlichen Website müsste registriert werden?
Steve