Mon application est configurée où toutes les demandes, sauf la connexion, doivent être "autorisées" à l'aide de l'attribut d'autorisation dans l'API Web. Par exemple.
[Authorize]
[HttpGet, Route("api/account/profile")]
public ApplicationUser Profile()
{
return userModel;
}
et seule la connexion ne doit pas autoriser car c'est là que vous obtenez le jeton;)
[AllowAnonymous]
[HttpPost, Route("api/account/login")]
public async Task<IHttpActionResult> Login(LoginViewModel model)
{
....
}
au lieu d'avoir à ajouter le [Authorize]
attribut à TOUS mes itinéraires, existe-t-il un moyen de le définir globalement?
Vous avez deux options
Niveau contrôleur en décorant votre contrôleur avec l'attribut authorize.
[Authorize]
[RoutePrefix("api/account")]
public class AccountController : ApiController
{
Vous pouvez également le définir au niveau global pour toutes les routes, dans la méthode Register
du fichier WebApiConfig.cs
config.Filters.Add(new AuthorizeAttribute());
Vous pouvez définir le AuthorizeAttribute
dans le fichier WebApiConfig
comme ci-dessous:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Filters.Add(new AuthorizeAttribute());
}
Désormais, toutes les méthodes de vos contrôleurs Web Api devront être autorisées. Si vous souhaitez supprimer cette autorisation pour une méthode, vous devez ajouter l'attribut [AllowAnonymous]
comme dans la méthode d'action de connexion.
Je voulais juste ajouter quelque chose à d'autres réponses que si vous utilisez
filters.Add(container.Resolve<AuthorizeAttribute>());
vous pouvez également injecter toutes les dépendances dans votre attribut en cas de besoin