He creado un servicio web RESTful simple (solo GET, por ahora) utilizando Microsoft ASP.NET MVC 4 ApiController
.Microsoft MVC 4, APIController y un servicio web de inicio de sesión RESTful adecuado
Ahora estoy buscando la forma correcta de implementar un sistema de autorización para el servicio. Sé que no quiero usar el FormsAuthentication
incorporado, ya que no quiero tener una página de inicio de sesión única para todas las aplicaciones que usan mi WS; además, eso rompe el paradigma RESTful, forzando una redirección y no notificando al cliente con el código de estado apropiado 401
.
Por eso ha desactivado FormsAuthentication
borrar las siguientes líneas de mi web.config
:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
y añadiendo lo siguiente:
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthentication" />
</modules>
Ya tengo una ApiController
para gestionar el inicio de sesión del usuario, lo que básicamente cheques las credenciales en mi base de datos y devuelve el usuario o 401
si las credenciales no son válidas.
He leído que tengo que implementar la API Membership
y Authorization
, pero no encontré nada que me ayude desde el principio. ¿Tiene alguna idea? ¿Debo administrar cookies y authcodes en la base de datos o hay una clase similar al FormsAuthentication
que lo hace por mí?
Parece que necesito el primer ejemplo, 'BasicAuthentication'. Pero todavía no he entendido si hay una manera de almacenar el código de autenticación (no enviaré nombre de usuario y contraseña al cliente como código de autenticación) en una base de datos. – frapontillo
No estoy seguro de entender lo que quiere decir con "una forma de almacenar el código de autenticación". ¿Cuál es tu descripción del authcode? Con la autenticación básica, desea codificar el nombre de usuario/contraseña enviado y decodificarlo en el otro extremo.También desea usar HTTPS/SSL/TSL con autenticación básica para encriptar todo el mensaje en el cable. Cuando almaceno contraseñas en un DB, siempre uso el cifrado de una manera para la contraseña almacenada. Luego, usa la misma encriptación en la contraseña ingresada por el usuario antes de hacer una comparación de lo que está en la base de datos. –
Me gustaría crear un authcode temporal para cada inicio de sesión y almacenarlo en una base de datos. Lo cual creo que es lo mismo que hace FormsAuthentication: crea un código de autorización de sesión estrictamente vinculado al usuario registrado. – frapontillo