Técnicas de autenticación de API web

26

Tenemos un marco de servicio web asp.net MVC para servir xml / json para las personas Obtener solicitudes, pero estamos luchando por encontrar la mejor manera (rápida, fácil, trivial para los usuarios que codifican con javascript u OO) para autenticar a los usuarios. No es que nuestros datos sean confidenciales ni nada, solo queremos que los usuarios se registren para que podamos tener su dirección de correo electrónico para notificarles los cambios y rastrear el uso.

En nuestro intento anterior, teníamos el nombre de usuario en el URI y solo nos aseguraríamos de que existiera e incrementaría las tablas db con el uso. Esto era súper básico, pero nos daríamos cuenta de que las personas usan la demostración como nombre de usuario, etc., por lo que necesitamos que sea un poco más sofisticado.

¿Qué técnicas de autenticación están disponibles? ¿Qué usan / hacen los principales jugadores?

Steve
fuente
¿Qué consideras un "jugador importante"? Por favor enumere algunos ejemplos. Mientras lo hace, incluya un enlace a las definiciones de API de "jugador principal" para que podamos ver qué hacen.
S.Lott
Consideraría Twitter / Facebook / Google / Flicker como los principales jugadores. developers.facebook.com apiwiki.twitter.com
Steve

Respuestas:

10

Hice esa pregunta en StackOverflow y puedes leerla aquí . También vea mi respuesta a mi propia pregunta. Que se trata de autenticación precisamente sin tener que pasar la contraseña para cada solicitud, y sin SSL o cifrado. Solo hashing simple.

Comunidad
fuente
No estoy seguro de que me guste tu solución.
Steve
Steve: use la solución Flickr
¿Existe una solución de parpadeo de código abierto o solo necesito leer su API y resolverla?
Steve
Lea su API, es muy simple. No es tan seguro como mi método si no tiene SSL, pero es muy bueno
Su solución md5 simplemente no parece ajustarse a la factura con "trivial para usuarios de javascript". Tendré que revisar la API de flickr un poco más. Lo miré pero necesito estudiar algo de la terminología. Principalmente lo que son los frob.
Steve
3

Este video es una forma interesante de usar una clave API con su servicio WCF / REST. código .

Tangurena
fuente
esta es la misma idea que poner el nombre de usuario en el servicio, excepto que lo llaman una clave de API. Alguien puede mirar la fuente de la página si javascript y copiar la clave y usarla en otro lugar. ¿Desearía que una clave api se vincule a un dominio de llamada para que la clave api deba ser válida y deba provenir de xyz.com?
Steve
¿También es un duplicado de lo que sugirió @KinGBin?
Steve
0

Supongo que estás usando Visual Studio. Si usa vs 2010 con 4.0 framework, puede consultar la plantilla "Servicio REST WCF con verificación de clave de API" en vs 2010.

KinGBin
fuente
1
Voy a tener que mirar dentro de eso. Me gustaría alejarme de WCF aunque personalmente.
Steve
Esto fue interesante, pero parece que solo pasa el APIKey en la cadena de consulta. ¿No significa eso que la clave API es visible para cualquiera entre la persona que llama y la persona que llama, incluso si usa SSL?
JMarsch
0

Siempre uso la autenticación HTTP para servicios web. La autenticación en sí sería manejada por su servidor web, probablemente IIS en su caso. Luego configuraría IIS para autenticarse en su base de datos, un almacén LDAP o similar.

Luego accedería al nombre de usuario a través de la propiedad User.Identity.Name

EDITAR : ejemplo de autenticación 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
fuente
¿Cómo harías esto con un cliente de JavaScript?
Steve
cliente = nuevo XMLHttpRequest (); client.open (método, url, asíncrono, usuario, contraseña);
ewindisch
añadido ejemplo jQuery a la respuesta
ewindisch
1
entonces la combinación de contraseña de nombre de usuario debería residir en texto plano en la fuente. No parece una buena idea.
Steve
1
ok, entonces básicamente tendrías que ingresar tu nombre de usuario / contraseña en una pantalla de inicio de sesión para disparar una solicitud de API. Esa solución es terrible. ¿Todos los usuarios de un sitio web público deberían estar registrados?
Steve