net mvc asp rest asp.net-web-api

rest - mvc - Autorización de ASP.NET Web API con AuthorizeAttribute



oauth 2.0 asp net web api (8)

ASP.NET 5 presentó el nuevo sistema Microsoft.AspNet.Authorization que puede asegurar controladores MVC y Web API.

Para más información, consulte mi respuesta relacionada aquí.

Actualizar:

En ese momento, hace 2 años, era Microsoft.AspNetCore.Authorization.

Como señaló @Chris Haines. ahora reside en Microsoft.AspNetCore.Authorization.

Desde .NET core 1.0 a 2.0 muchos espacios de nombres se han movido, creo. Y la funcionalidad de propagación entre .net classic y core era oscura. Es por eso que Microsoft introdujo el estándar .net.

.net estándar

Uso de la nueva versión beta de ASP.NET Web API. Parece que no puedo obtener el método sugerido para autenticar usuarios, para trabajar. Donde parece ser el enfoque sugerido, para agregar el filtro [Authorize] a los controladores de la API. Por ejemplo:

[Authorize] public IEnumerable<Item> Get() { return itemsService.GetItems(); }

Sin embargo, esto no funciona como se esperaba. Al solicitar el recurso, se te redirige a un formulario de inicio de sesión. Lo cual no es muy adecuado para un webapi RESTful.

¿Cómo debo proceder con esto? ¿Funcionará de manera diferente en futuras versiones ?, o ¿debería recurrir a la implementación de mi propio filtro de acción?



Está siendo redirigido a la página de inicio de sesión porque el módulo de autenticación de formularios lo hace automáticamente. Para deshacerse de ese comportamiento, desactive la autenticación de formularios como lo sugirió Paul. Si desea utilizar un enfoque más basado en REST, debería considerar la implementación de la autorización HTTP. Eche un vistazo a esta entrada del blog http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-membership-provider/


Establezca su modo de autenticación en Ninguno :

<authentication mode="None" />

Ninguno Especifica ninguna autenticación. Su aplicación espera solo usuarios anónimos o la aplicación proporciona su propia autenticación.

http://msdn.microsoft.com/en-us/library/532aee0e.aspx

Por supuesto, entonces debe proporcionar algún tipo de autenticación a través de encabezados o fichas o algo así. También puede especificar Windows y usar la autenticación incorporada a través de encabezados.

Si este sitio está mezclado entre API y páginas reales que sí necesitan la configuración de Formularios , entonces deberá escribir su propio manejo.

Todo lo que hace el atributo es devolver una instancia HttpUnauthorizedResult , la redirección se realiza fuera del atributo, por lo que no es el problema, es su proveedor de autenticación.



Si está utilizando un Rol, asegúrese de tenerlo escrito correctamente:

Si su función se llama ''Administrador'', esto, por ejemplo, no funcionará:

[System.Web.Http.Authorize(Roles = "Administator")]

Tampoco esto:

[System.Web.Http.Authorize(Roles = "Administrators")]

Oops ...


Verifique que está utilizando System.Web.Http.AuthorizeAttribute y no System.Web.Mvc.AuthorizeAttribute . Esto me mordió antes. Sé que el equipo de WebAPI está tratando de unir todo para que sea familiar para los usuarios de MVC, pero creo que algunas cosas son innecesariamente confusas.


[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [Produces("application/json")] [Route("api/[controller]")] public class CitiesController : Controller { [HttpGet("[action]")] public IActionResult Get(long cityId) => Ok(Mapper.Map<City, CityDTO>(director.UnitOfWork.Cities.Get(cityId))); }

Utilizar

[Autorizar (AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]

Filtrar con tipo de autenticación