web-dev-qa-db-fra.com

"Une erreur s'est produite lors d'une opération cryptographique" lors du déchiffrement du cookie Forms

J'ai téléchargé mon site Web sur un hébergement Web et cette erreur est survenue. 
' Une erreur s'est produite lors d'une opération cryptographique .'.

J'ai effectué des recherches et il semble que le cookie authentifié par le formulaire soit lié à la MachineKey (qui diffère lorsque vous utilisez Webhost).


J'ai trouvé une méthode qui devrait résoudre ce problème, mais l'erreur persiste.

CODE:

/// <summary>
    /// This method removes a cookie if the machine key is different than the one that saved the cookie;
    /// </summary>
    protected void Application_Error(object sender, EventArgs e)
    {
        var error = Server.GetLastError();
        var cryptoEx = error as CryptographicException;
        if (cryptoEx != null)
        {
            FederatedAuthentication.WSFederationAuthenticationModule.SignOut();
            Global.Cookies.FormAuthenticated Cookie = new Global.Cookies.FormAuthenticated();
            Cookie.Delete();
            Server.ClearError();
        }
    }


TRACE DE LA PILE:

[CryptographicException: Error occurred during a cryptographic operation.]
   System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.HomogenizeErrors(Func`2 func, Byte[] input) +115
   System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.Unprotect(Byte[] protectedData) +59
   System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) +9824926
   Archive_Template.Main.resolveLoginUser(String sessionKey) in f:\Archive_Template\Archive_Template\Main.aspx.cs:481
   Archive_Template.Main.OnPreInit(EventArgs e) in f:\Archive_Template\Archive_Template\Main.aspx.cs:52
   System.Web.UI.Page.PerformPreInit() +31
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +335
33
Jeroen Vorsselman

Pour ceux qui n'ont pas résolu leur problème, il me manquait l'entrée "machineKey" pour chiffrer/déchiffrer dans mon fichier web.config

22
Grace

J'ai rencontré le même problème. Je viens d'effacer tous les les cookies du navigateur et les données en cache et tout a été corrigé.

20
Baqer Naqvi

Si vous utilisez l'authentification de formulaires. vous pouvez vous déconnecter lorsque vous attrapez l'exception et permettre à vos utilisateurs de se connecter et de créer un cookie valide

catch (CryptographicException cex)
{
    FormsAuthentication.SignOut();
}
16
Ozan BAYRAM

Cela est dû au manque de clé d'ordinateur, qui est utilisée comme clé symétrique pour le cryptage et le décryptage.

Pour configurer la machine dans IIS;

Accédez à votre application -> Clés de la machine -> Générer des clés

7
Ghaleb Badran

Je viens d'avoir cela aussi, j'ai supprimé les entrées de table UserTokenCaches de la base de données.

4
Jim Wolff

J'ai rencontré ce problème lorsque j'ai essayé de récupérer un cookie d'authentification par formulaires créé par une application ASP.NET 2.0 dans un projet d'API Web .NET4.5. La solution consistait à ajouter un attribut appelé "compatibilitéMode" au nœud "machineKey" dans le fichier web.config de mon API Web:

<machineKey 
...
compatibilityMode="Framework20SP2"/>

Documentation: https://msdn.Microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

Et à partir de la doc, voici les valeurs autorisées pour cet attribut:

  • Framework20SP1. Cette valeur spécifie qu'ASP.NET utilise des méthodes de cryptage disponibles dans les versions d'ASP.NET antérieures à 2.0 SP2. Utilisez cette valeur pour tous les serveurs d'une batterie de serveurs Web si l'un des serveurs dispose d'une version du .NET Framework antérieure à 2.0 SP2. Il s'agit de la valeur par défaut sauf si le fichier Web.config de l'application possède l'attribut targetFramework de l'élément httpRuntime défini sur "4.5".
  • Framework20SP2. Cette valeur spécifie qu'ASP.NET utilise des méthodes de cryptage mises à niveau introduites dans le .NET Framework 2.0 SP2. Utilisez cette valeur pour tous les serveurs d'une batterie de serveurs Web si tous les serveurs sont dotés du .NET Framework 2.0 SP2 ou version ultérieure mais qu'au moins un d'entre eux ne possède pas le .NET Framework 4.5.
  • Framework45. Les améliorations cryptographiques pour ASP.NET 4.5 sont en vigueur. Il s'agit de la valeur par défaut si le fichier Web.config de l'application possède l'attribut targetFramework de l'élément httpRuntime défini sur "4.5".
4
jwill212
       protected void Application_Error(object sender_, CommandEventArgs e_)
    {
        Exception exception = Server.GetLastError();
        if(exception is CryptographicException)
        {
            FormsAuthentication.SignOut();
        }
    }

dans votre Global.asax.cs, depuis Correction des erreurs dans Global.asax , tant que vous utilisez l'authentification par formulaire (nom d'utilisateur/mot de passe). Travaillé pour moi.

3
barbara.post

Je l'ai également expérimenté lors du développement d'une nouvelle solution et de l'exécution du site Web sur localhost. Définir la clé machine ne faisait aucune différence, mais la suppression de tous les cookies de localhost a résolu le problème. 

3
andreasnico

Une autre option consiste à effacer les cookies du paramétrage du navigateur, ce qui permet de stocker de nouveaux cookies.

3
Manoj Patil

Si vous recevez cette erreur lors de la mise en œuvre de l'authentification unique (comme décrit ici http://www.alexboyang.com/2014/05/28/sso-for-asp-net-mvc4-and-mvc5-web-apps- shared-the-same-domain/ ), assurez-vous d’avoir le même cadre cible pour tous les projets. J'ai eu un projet avec .NET 4.0 et l'autre sur .NET 4.5.2. 

Changer le premier en 4.5.2 a résolu le problème pour moi.

2
SzilardD

J'avais des erreurs de cryptage lors de la validation du jeton AntiForgery. 

Je pense que c’est parce que je venais d’apporter des modifications de configuration du contrôle de sécurité à mon serveur afin de configurer le recyclage des applications en vue du recyclage lorsque la limite de mémoire virtuelle atteignait 1 000 000 kilo-octets. 

C'était vraiment trop peu pour le recyclage de la mémoire virtuelle. L'utilisation de la mémoire privée peut être définie sur 1 000 000 Ko, mais la mémoire virtuelle doit disposer de beaucoup plus d'espace.

J'ai remarqué que mon application recyclait beaucoup trop souvent. 

J'ai augmenté la limite de mémoire virtuelle à 10 000 000 Ko et ces erreurs ont disparu. Je pense que le pool d'applications s'est peut-être recyclé au moment où je remplissais le formulaire.

1
WWC

J'ai eu le même problème: MVC 5 ASP.Net Web Framework .net Framework 4.6.1

Solution:

  1. Accédez au dossier App_Data (Explorateur de solutions).
  2. Double-cliquez dans votre NOM.mdf (cette action ouvre l'onglet Explorateur de serveurs).
  3. Faites un clic droit sur la table UserTokenCaches et affichez Afficher les données de la table
  4. Supprimer la ligne
  5. Exécutez à nouveau l'application et tout ira bien
0
Luis Eduardo