J'ai un projet WebAPI dans lequel j'ai besoin d'utiliser l'authentification Windows pour les utilisateurs, mais implémenter un fournisseur de rôles personnalisé pour les attributs Authorize au-dessus des routes. Lorsque je l'implémente cependant, j'obtiens toujours {"Message": "L'autorisation a été refusée pour cette requête."} Comme résultat de mon appel. De plus, aucun de mes points d'arrêt déclenche jamais sauf celle du constructeur du fournisseur de rôles personnaliséRègleProvider personnalisée avec l'authentification Windows dans l'API Web
Contrôleur
[Authorize(Roles="Administrator")]
[RoutePrefix("api/Constituents")]
public class ConstituentsController : ApiController
{
[Route("Constituents")]
[HttpGet]
public IDataResponse<List<IConstituent>> GetConstituents()
{
return service.GetConstituent();
}
personnalisé Rôle Fournisseur
public class CustomRoleProvider : RoleProvider
{
public CustomRoleProvider()
{
this.UserRepo = new UserRepository(); //Breakpoint here triggers
this.RoleRepo = new RoleRepository();
}
public override string[] GetRolesForUser(string username)
{
var roles = UserRepo.GetUser(username)?.Roles?.Select(r => r.Name).ToArray();
return roles;
}
public override bool IsUserInRole(string username, string roleName)
{
var user = UserRepo.GetUser(username);
return user.Roles.Select(r => r.Name).Contains(roleName);
}
Web Config
<authentication mode="Windows"/>
<roleManager cacheRolesInCookie="false"
defaultProvider="CustomRoleProvider"
enabled="true">
<providers>
<clear />
<add name="CustomRoleProvider"
type="Data.CustomRoleProvider, Data" />
</providers>
De quelle pièce de puzzle ai-je besoin? J'ai besoin d'obtenir l'utilisateur actuel faisant la demande et ensuite vérifier pour avoir le rôle approprié dans la base de données.
Merci