En suivant la documentation ici, j'ai essayé d'implémenter un schéma d'authentification basé sur une politique. http://docs.asp.net/en/latest/security/authorization/policies.html#security-authorization-handler-example
J'ai rencontré un problème avec ma méthode Handle qui n'était pas appelée sur mon AuthorizationHandler personnalisé. (Il n'est pas lancé ici). Il injecte également la dépendance actuellement dans le constructeur.
Voici le code de l'AuthorizationHandler.
using WebAPIApplication.Services;
using Microsoft.AspNet.Authorization;
namespace WebAPIApplication.Auth
{
public class TokenAuthHandler : AuthorizationHandler<TokenRequirement>, IAuthorizationRequirement
{
private IAuthService _authService;
public TokenAuthHandler(IAuthService authService)
{
_authService = authService;
}
protected override void Handle(AuthorizationContext context, TokenRequirement requirement)
{
throw new Exception("Handle Reached");
}
}
public class TokenRequirement : IAuthorizationRequirement
{
public TokenRequirement()
{
}
}
}
Dans Start Up, j'ai
// Authorization
services.AddSingleton<IAuthorizationHandler, TokenAuthHandler>()
.AddAuthorization(options =>
{
options.AddPolicy("ValidToken",
policy => policy.Requirements.Add(new TokenRequirement()));
});
La méthode du contrôleur est la suivante
// GET: api/values
[HttpGet, Authorize(Policy="ValidToken")]
public string Get()
{
return "test";
}
L'activation de ce point d'accès ne renvoie rien et la console affiche un message d'avertissement du type
warn: Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker[0]
Authorization failed for the request at filter 'Microsoft.AspNet.Mvc.Filters.AuthorizeFilter'.
Je suis en mesure d'atteindre d'autres points de terminaison qui n'ont pas l'attribut avec succès.
SOS, Jack