Tengo una aplicación MVC3 y las acciones de mi controlador están aseguradas mediante el atributo [Autorizar]. Hasta ahora, tan bueno, auth de formularios funciona muy bien. Ahora quiero agregar una API JSON a mi aplicación para que algunas acciones sean accesibles para clientes que no sean del navegador.Protección de la acción del controlador ASP.NET MVC que devuelve JSON
Tengo problemas para encontrar el diseño "correcto".
1) Cada usuario tiene una clave de API secreta.
2) ID de usuario 5 llamadas http://myapp.com/foocontroller/baraction/5?param1=value1¶m2=value2&secure_hash=someValue. Aquí, secure_hash es simplemente el hash SHA1 de los parámetros param1 y param2 anexados con la clave secreta API para el usuario
2)/foocontroller/baraction se decorará con [CustomAuthorize]. Esta será una implementación de AuthorizeAttribute que verificará si la solicitud entra como JSON. Si es así, comprobará el hash y verá si coincide. De lo contrario, si la solicitud es HTML, llamo a la autorización existente.
No estoy del todo seguro de si esto funcionará. ¿Es normal pasar un hash seguro en la cadena de consulta o debería pasarlo como un encabezado HTTP? ¿Es mejor usar la autenticación básica de HTTP en lugar de un hash creado con la clave de API secreta?
¡Las sugerencias de cualquier persona que haya hecho una API web usando ASP.NET MVC serían bienvenidas!
Jason, me gustaría más detalles. Soy muy nuevo en MVC (fondo RoR), así que no sé cómo funcionan los atributos de autorización. ¡Gracias! –
Gracias Jason! ¿Cómo se "pasa la clave secreta de la API junto con el nombre de usuario y la contraseña en el cuerpo de la solicitud"? ¿Simplemente agrega encabezados HTTP personalizados a la solicitud o usa Http-Authorize? –
Excelente, gracias por la respuesta detallada! –