Este tema ha sido increíblemente confuso para mí. Soy un novato en aplicaciones HTTP pero necesito desarrollar un cliente de iPhone que consuma datos JSON de alguna parte. Elegí Web API de MS porque parecía bastante fácil, pero cuando se trata de autenticar usuarios, las cosas se ponen bastante frustrantes.
Estoy sorprendido de cómo no he podido encontrar un ejemplo claro de cómo autenticar a un usuario desde la pantalla de inicio de sesión hasta usar el Authorize
atributo sobre mis ApiController
métodos después de varias horas de Google.
Esta no es una pregunta, sino una solicitud de un ejemplo de cómo hacer esto exactamente. He mirado las siguientes páginas:
Si bien estos explican cómo manejar solicitudes no autorizadas, no demuestran claramente algo así como LoginController
algo así como solicitar credenciales de usuario y validarlas.
Alguien dispuesto a escribir un buen ejemplo simple o señalarme en la dirección correcta, por favor?
Gracias.
fuente
Respuestas:
Eso es porque te estás confundiendo acerca de estos dos conceptos:
La autenticación es el mecanismo por el cual los sistemas pueden identificar de forma segura a sus usuarios. Los sistemas de autenticación proporcionan respuestas a las preguntas:
La autorización es el mecanismo por el cual un sistema determina qué nivel de acceso debe tener un usuario autenticado en particular para asegurar los recursos controlados por el sistema. Por ejemplo, un sistema de gestión de bases de datos podría diseñarse para proporcionar a ciertas personas específicas la capacidad de recuperar información de una base de datos pero no la capacidad de cambiar los datos almacenados en la base de datos, mientras que les da a otras personas la capacidad de cambiar datos. Los sistemas de autorización proporcionan respuestas a las preguntas:
El
Authorize
atributo en MVC se usa para aplicar reglas de acceso, por ejemplo:La regla anterior permitirá solo usuarios en el Administrador y Súper Usuario roles de accedan al método
Estas reglas también se pueden establecer en el archivo web.config, utilizando el
location
elemento Ejemplo:Sin embargo, antes de ejecutar esas reglas de autorización, debe autenticarse en el sitio web actual .
A partir de aquí, podríamos dividir el problema en dos:
Autentique a los usuarios cuando consuman los servicios de API web dentro de la misma aplicación web
Este sería el enfoque más simple, porque confiaría en la autenticación en ASP.Net
Este es un ejemplo simple:
Web.config
Los usuarios serán redirigidos a la cuenta / ruta de inicio de sesión , allí representaría controles personalizados para solicitar credenciales de usuario y luego configuraría la cookie de autenticación usando:
Autenticación multiplataforma
Este caso sería cuando solo exponga servicios de API web dentro de la aplicación web, por lo tanto, tendría otro cliente consumiendo los servicios, el cliente podría ser otra aplicación web o cualquier aplicación .Net (Win Forms, WPF, consola, servicio de Windows, etc)
Por ejemplo, suponga que consumirá el servicio API web de otra aplicación web en el mismo dominio de red (dentro de una intranet), en este caso podría confiar en la autenticación de Windows proporcionada por ASP.Net.
Si sus servicios están expuestos en Internet, deberá pasar los tokens autenticados a cada servicio de API web.
Para más información, echa un vistazo a los siguientes artículos:
http://stevescodingblog.co.uk/basic-authentication-with-asp-net-webapi/
http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/
fuente
Si desea autenticarse con un nombre de usuario y contraseña y sin una cookie de autorización , el atributo Autorizar MVC4 no funcionará de inmediato . Sin embargo, puede agregar el siguiente método auxiliar a su controlador para aceptar encabezados de autenticación básicos. Llámalo desde el comienzo de los métodos de tu controlador.
Desde el lado del cliente, este asistente crea un
HttpClient
con el encabezado de autenticación en su lugar:fuente
Estoy trabajando en un proyecto MVC5 / Web API y necesitaba poder obtener autorización para los métodos de la API web. Cuando mi vista de índice se carga por primera vez, hago una llamada al método de API web 'token' que creo que se crea automáticamente.
El código del lado del cliente (CoffeeScript) para obtener el token es:
Si tiene éxito, se llama a lo siguiente, que guarda el token de autenticación localmente:
Luego, si necesito hacer una llamada Ajax a un método de API web que tenga la etiqueta [Autorizar], simplemente agrego el siguiente encabezado a mi llamada Ajax:
fuente
response.access_token
viene. ¿Lo está configurando desde el código c #?