8
votes

Comment implémenter un TokenProvider dans l'identité ASP.NET 1.1 Builée nocturne?

J'essaie de mettre en œuvre la fonctionnalité de réinitialisation du mot de passe avec la construction nocturne de l'identité ASP.NET 1.1. Il y a une méthode d'Usermanager.getPasswordResetokeSetToke, mais elle jette une exception "Aucun ItokenProvider n'est enregistré". Y a-t-il un fournisseur de jeton intégré à l'identité ASP.NET? Si oui, comment je peux l'enregistrer? Si non, comment je peux en mettre en œuvre un? Sera un fournisseur de jeton par défaut dans le 1.1. Libération? Et la dernière question, existe-t-il une date de sortie estimée 1.1?


0 commentaires

4 Réponses :


7
votes

L'implémentation du fournisseur de jeton par défaut se trouve dans le fichier Microsoft.Identity.owin package: xxx

et vous faites quelque chose comme ceci pour filer une manière à l'aide de la valeur par défaut Fournisseur de protection des données de votre iAppbuilder xxx


7 commentaires

Merci, semble prometteur. Juste une question: comment puis-je accéder à l'application IAPPBuilder de l'endroit où j'imitive Usermanager (par exemple, de comptesController)?


Quelle construction nocturne est-ce? J'utilise les packages 1.1.0-Alpha1-131024 (PRERELEASE) et je ne vois pas de getdataProtectionProvider méthode. S'il y a un fournisseur de jeton par défaut, pourquoi ne pas être le PasswordSetTokens et USERCONFirmationTokens déjà initialisé avec elle afin que nous n'ayons pas à sauter à travers ces cerceaux pour pouvoir utiliser eux? À moins que vous ayez besoin de changer quelque chose sur la manière dont les jetons sont générés, cela devrait «travailler» hors de la boîte sans aucun travail supplémentaire requis ni (pour moi au moins), il n'ya pas vraiment de point dans la création d'un fournisseur par défaut.


Donc, la raison pour laquelle ils ne font pas partie de l'identité.core et vivent en identité.Owin est que le noyau ne peut pas dépendre de Owin, et la mise en œuvre par défaut provient de Owin. GetdataProtectionProvider vit dans microsoft.owin.security.dataproection comme une méthode d'extension off de IAPPBuilder, je crois.


Trouvé la méthode dans l'espace de noms que vous avez spécifié. Je pense toujours que tout cela devrait déjà être initialisé de la boîte. Je ne devrais pas avoir à définir d'entre eux à moins que je ne voulais changer comment fonctionne les fournisseurs de jeton.


Il semble que pour les fonctionnalités de confirmation de compte / Mot de passe oublié dans ASP.NET Identity 2.0 Alpha Vous devez redessiner tout votre code d'initialisation pour Usermanager, etc. Jetez un coup d'oeil dans cet exemple d'application MVC ASPNET.CODEPLEX.COM/SOURCEPONTROL/LATEST Samples-> Identité-> Identité-Passwordpolicy et comparez-le à une application par défaut RTM MVC 5 et vous verra la différence. Il y a une énorme différence dans les éléments d'initialisation (check startup.auth.cs par exemple) et aura un impact important sur n'importe quelle application MVC à l'aide de ASP.NET IDENTITY 1.0 (RTM actuel). Pas si bon!


En général, l'ancien style 1.0 fonctionnera également, nos directives normatifs et nos échantillons par défaut vont simplement faire les choses différemment car certaines des nouvelles fonctionnalités 2.0 nécessitent l'initialisation.


Qu'est-ce que getdataProtectionProvider () méthode?



1
votes

OK, répondant à ma propre question basée sur la réponse @ hao-kung. Premièrement, ajoutez un constructeur statique et usermanagerFactory à la classe de starup (startup.auth.cs) xxx

puis init uermanager dans la contrecontroller à l'aide de cette usermanagerFactory xxx


0 commentaires

5
votes

Une autre façon de le faire (construire sur les autres réponses mais la simplifiant certains) est de modifier startup.auth.cs code> de sorte qu'il semble similaire à celui-ci:

 public AccountController()
     : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
 {
     if (Startup.DataProtectionProvider != null)
     {
         this.UserManager.PasswordResetTokens = new DataProtectorTokenProvider(Startup.DataProtectionProvider.Create("PasswordReset"));
         this.UserManager.UserConfirmationTokens = new DataProtectorTokenProvider(Startup.DataProtectionProvider.Create("ConfirmUser"));
     }
 }


0 commentaires

19
votes

Si une personne à la recherche d'une solution sous Aspnet.Identity 2.0 version bêta1.

Seulement ceci doit être modifié. xxx

PasswordSetokens et USERCONFirmationTokens est fusionné dans UserStokenProvider La classe de la propriété et du fournisseur de jetons est également modifié.


7 commentaires

D'où vient DataProtectorProvider?


Il provient de Microsoft.aspnet.Identity.owin Espace de noms.


Nope c'est pas là-bas.


Je ne suis pas sûr de quelle version utilisez-vous. Vous pouvez regarder cette classe Link


Comment quelqu'un voudrait-il que la Tokenlifespan soit différente si les jetons de mots de passeResettakens et d'UserConfirmation sont fusionnés dans UserSertennProvider?


Je ne sais pas si cette installation est disponible. CODEPLEX


@jtsan La vie de jeton est une propriété publique pour que vous puissiez la définir avant chaque appel. Nouveau DataProtectortendenProvider (DataProtectionpr ovider.create ("ASP.N ET IDENTITY")) {Tokenlifespan = Nouveau Timespan ()};