Techniques d'authentification de l'API Web

26

Nous avons un framework de service Web asp.net MVC pour servir xml / json pour les personnes. Obtenez des demandes mais nous avons du mal à trouver le meilleur moyen (rapide, facile, trivial pour les utilisateurs codant avec des langages javascript ou OO) pour authentifier les utilisateurs. Ce n'est pas que nos données soient sensibles ou quoi que ce soit, nous voulons simplement que les utilisateurs s'enregistrent afin que nous puissions avoir leur adresse e-mail pour les informer des changements et suivre l'utilisation.

Lors de notre précédente tentative, nous avions le nom d'utilisateur dans l'URI et nous nous assurions simplement qu'il existait et incrémentions les tables de base de données avec l'utilisation. C'était super basique, mais nous remarquerions que les gens utilisent démo comme nom d'utilisateur, etc., nous avons donc besoin qu'il soit un peu plus sophistiqué.

Quelles techniques d'authentification sont disponibles? Qu'est-ce que les principaux acteurs utilisent / font.

Steve
la source
Que considérez-vous comme un "acteur majeur"? Veuillez énumérer quelques exemples. Pendant que vous y êtes, veuillez inclure un lien vers les définitions de l'API "acteur majeur" afin que nous puissions voir ce qu'elles font.
S.Lott
je considérerais le twitter / facebook / google / scintillement les principaux acteurs. developers.facebook.com apiwiki.twitter.com
Steve

Réponses:

10

J'ai posé cette question sur StackOverflow et vous pouvez la lire ici . Voir également ma réponse à ma propre question. Il s'agit précisément d'authentification sans avoir à passer le mot de passe pour chaque demande, et sans SSL ni cryptage. Hachage simple.

Communauté
la source
je ne suis pas sûr que j'aime votre solution.
Steve
Steve: utilisez la solution Flickr
Existe-t-il une solution de scintillement open source ou dois-je simplement lire leur API et la comprendre?
Steve
Lisez leur API, c'est très simple. Pas aussi sûr que ma méthode si vous n'avez pas SSL, mais très bien
Votre solution md5 ne semble tout simplement pas correspondre à la facture avec "trivial pour les utilisateurs de javascript". Je vais devoir vérifier encore plus l'API flickr. J'ai jeté un coup d'œil dessus mais j'ai besoin d'étudier une partie de la terminologie. Principalement ce que sont les frob.
Steve
3

Cette vidéo est une façon intéressante d'utiliser une clé API avec votre service WCF / REST. code .

Tangurena
la source
c'est la même idée que de mettre le nom d'utilisateur dans le service, sauf qu'ils l'appellent une clé api. Quelqu'un peut regarder la source de la page si javascript et copier la clé et l'utiliser ailleurs. Souhaitez-vous qu'une clé API soit liée à un domaine appelant pour que la clé API soit valide et provienne de xyz.com?
Steve
est-ce également un double de ce que @KinGBin a suggéré?
Steve
0

Je suppose que vous utilisez Visual Studio. Si vous utilisez vs 2010 avec le framework 4.0, vous pouvez consulter le modèle "Service WCF REST avec vérification de clé API" dans vs 2010.

KinGBin
la source
1
Je vais devoir examiner cela. J'aimerais bien m'éloigner de la WCF, personnellement.
Steve
C'était intéressant, mais il semble qu'il passe juste l'APIKey dans la chaîne de requête. Cela ne signifie-t-il pas que la clé API est visible par quiconque entre l'appelant et l'appelé - même si vous utilisez SSL?
JMarsch
0

J'utilise toujours l'authentification HTTP pour les services Web. L'authentification elle-même serait gérée par votre serveur Web, probablement IIS dans votre cas. Vous devez ensuite configurer IIS pour qu'il s'authentifie auprès de votre base de données, d'un magasin LDAP ou similaire.

Vous accéderiez alors au nom d'utilisateur via la propriété User.Identity.Name

EDIT : exemple d'authentification 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
la source
comment feriez-vous cela avec un client javascript?
Steve
client = new XMLHttpRequest (); client.open (méthode, URL, async, utilisateur, mot de passe);
ewindisch
ajout d'un exemple jquery pour répondre
ewindisch
1
la combinaison nom d'utilisateur / mot de passe devrait donc résider en texte brut dans la source. ne semble pas être une bonne idée.
Steve
1
ok, donc en gros, vous devrez entrer votre nom d'utilisateur / mot de passe dans un écran de connexion pour lancer une demande d'api? Cette solution est terrible. Chaque utilisateur d'un site Web public devrait-il être enregistré?
Steve