Construire un mot de passe de vérification d’utilisateur personnalisé dans Asp.Net Identity 2

J’ai besoin de créer une vérification de mot de passe d’utilisateur personnalisée dans une application implémentée dans asp.net MVC 5 et utilisant Asp.Net Identity 2.

J’ai lu dans un article stackoverflow ( écriture d’un IUserPasswordStore et d’un SignInManager.PasswordSignInAsync personnalisé dans Identity 2.1 ) qu’il me suffisait de remplacer la méthode CheckPasswordAsync dans UserManager.

J’essaie de remplacer cette méthode dans le fichier IdentityConfig.cs. Voici le code que j’ai ajouté à la classe ApplicationUserManager uniquement pour tester cette solution:

public override async Task CheckPasswordAsync(ApplicationUser user, ssortingng password) { return await Task.Run(() => { return true; }); } 

Le problème est que ce code n’est jamais exécuté dans le processus de connexion et que la connexion échoue toujours. Pour connecter l’utilisateur que j’utilise SignInManager.PasswordSignInAsync pour vous connecter à l’utilisateur, il s’agit de la valeur par défaut lors de la création d’une nouvelle application Web dans asp.net MVC 5. Cette méthode ne doit-elle pas appeler ApplicationUserManager. CheckPasswordAsync? Ou il y a une autre configuration nécessaire à ce travail?

Ça devrait marcher. Je viens d’utiliser le modèle standard ASP.NET MVC, de mettre à jour toutes les bibliothèques impliquées via NuGet, et cela doit fonctionner.

Je suppose que le problème est la façon dont vous surchargez la méthode.

Dans votre ApplicationUserManager essayez de modifier votre code comme suit:

 public override Task CheckPasswordAsync(ApplicationUser user, ssortingng password) { return Task.FromResult(true); } 

ou:

 public override Task CheckPasswordAsync(ApplicationUser user, ssortingng password) { return Task.Run(() => MyCheckPasswordAsync()); } private bool MyCheckPasswordAsync() { return true; } 

et vous verrez qu’il passe à travers:

entrez la description de l'image ici

Le problème était que j’essayais de me connecter avec un utilisateur qui n’existe pas dans le système.

SignInManager.PasswordSignInAsync n’invoque jamais ApplicationUserManager. CheckPasswordAsync si l’utilisateur n’existe pas dans le référentiel du magasin d’utilisateurs.

En conclusion, je dois stocker les utilisateurs dans mon application ou mettre en place un mécanisme de stockage personnalisé.

Ce n’est peut-être pas une réponse directe, mais cela fournit une solution complète au problème. Il implémente un filtre d’autorisation personnalisé que vous pouvez ensuite personnaliser pour faire ce que vous voulez.

https://weblog.west-wind.com/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter

 [AtsortingbuteUsage(AtsortingbuteTargets.Class | AtsortingbuteTargets.Method, AllowMultiple = false)] public class BasicAuthenticationFilter : AuthorizationFilterAtsortingbute 

Il peut ensuite être utilisé comme ceci à la place de l’atsortingbut [Authorize]

 [MyBasicAuthenticationFilter] public class QueueController : ApiController