2010-08-09 33 views
3

j'ai une application existante dans la production qui utilise SqlMembershipProvider et dispose d'une clé machine spécifiée:Hashage ne fonctionne plus en .Net 4.0 malgré MSDN solutions de contournement

<machineKey validationKey="..." decryptionKey="..." 
      validation="SHA1" decryption="AES"/> 

Il fonctionne sous .Net 2.0 AppPool actuellement. Je suis en train d'écrire une nouvelle application qui doit utiliser la base de données existante, dont j'ai une sauvegarde de. J'essaie de faire fonctionner SqlMembershipProvider avec (mais ce n'est pas le cas) mais je ne peux pas obtenir un nom d'utilisateur/mot de passe connu. Ce compte fonctionne dans prod, et le mot de passe hash et sel sont les mêmes sur les deux bases de données (prod et mine). Cependant, au moment où le SqlMembershipProvider compare le mot de passe de la base de données avec le mot de passe haché entré, ils ne sont pas identiques.

Cet article suggère la rupture des changements avec l'algorithme de hachage par défaut dans ASP.Net en .Net 4.0: http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes

Cependant je spécifie déjà une clé de la machine comme l'a suggéré. En outre, j'ai supprimé les composants .Net 4.0 et l'ai ramené à 3.5 (qui est CLR 2) et le hachage du mot de passe entré est toujours le même. En outre, j'ai essayé de redéployer cette nouvelle application temporaire sur la même production de serveur et elle ne parvient toujours pas à se connecter (bien que je ne puisse pas vérifier si elle échoue en raison d'une incompatibilité de hash de mot de passe).

Que puis-je essayer ici?

Répondre

0

Copiez d'abord l'application de production dans dev/test et exécutez-la pour voir si cela fonctionne comme prévu. Si c'est le cas, passez à la mise à niveau du projet sous .NET 4.0, mais ne modifiez aucun autre code (par exemple, n'essayez pas de le faire fonctionner avec SQLMembershipProvider) - retest l'application Si cela fonctionne, vous savez qu'il est Ce n'est pas un problème d'environnement, et ce n'est pas un problème de changement .NET, ce qui indiquerait que votre code ne fonctionne pas comme prévu. Je suppose que l'algorithme de hachage que vous utilisez dans la nouvelle application est différent de celui utilisé dans l'ancienne application. Avez-vous salé le mot de passe dans l'ancienne application? Utilisez-vous le même sel dans la nouvelle application?