web-dev-qa-db-fra.com

Comment définir machineKey sur le site Web Azure

J'utilise un site Web Azure. Chaque fois que je déploie, tout le monde est déconnecté car la machineKey change.

J'ai spécifié le machineKey dans le web.config mais cela n'a pas résolu le problème. Je pense que cela est dû au fait qu'Azure remplace automatiquement la machineKey[1]

J'ai trouvé quelques questions similaires ici, mais les réponses sont liées à des liens morts. 

Alors, quelle est la solution? Il existe sûrement un moyen de garder les utilisateurs connectés quels que soient les déploiements sur Azure.

26
Mr. Flibble

Essayez de réinitialiser la section de configuration de la machine-key sur Application_Start:

protected void Application_Start()
{
    // ...

    var mksType = typeof(MachineKeySection);
    var mksSection = ConfigurationManager.GetSection("system.web/machineKey") as MachineKeySection;
    var resetMethod = mksType.GetMethod("Reset", BindingFlags.NonPublic | BindingFlags.Instance);

    var newConfig = new MachineKeySection();
    newConfig.ApplicationName = mksSection.ApplicationName;
    newConfig.CompatibilityMode = mksSection.CompatibilityMode;
    newConfig.DataProtectorType = mksSection.DataProtectorType;
    newConfig.Validation = mksSection.Validation;

    newConfig.ValidationKey = ConfigurationManager.AppSettings["MK_ValidationKey"];
    newConfig.DecryptionKey = ConfigurationManager.AppSettings["MK_DecryptionKey"];
    newConfig.Decryption = ConfigurationManager.AppSettings["MK_Decryption"]; // default: AES
    newConfig.ValidationAlgorithm = ConfigurationManager.AppSettings["MK_ValidationAlgorithm"]; // default: SHA1

    resetMethod.Invoke(mksSection, new object[] { newConfig });
}

Ce qui précède suppose que vous définissez les valeurs appropriées dans la section <appSettings>:

<appSettings>
  <add key="MK_ValidationKey" value="...08EB13BEC0E42B3F0F06B2C319B..." />
  <add key="MK_DecryptionKey" value="...BB72FCE34A7B913DFC414E86BB5..." />
  <add key="MK_Decryption" value="AES" />
  <add key="MK_ValidationAlgorithm" value="SHA1" />
</appSettings>

Mais vous pouvez charger vos valeurs réelles à partir de la source de configuration de votre choix.

18
haim770

Si Azure est en train de réécrire votre machineKey, vous ne pouvez rien y faire, car cela fait partie de son infrastructure. Cependant, il existe d'autres méthodes. 

Remplacer FormsAuthentication  

Cela ne devrait pas être difficile, car vous pouvez facilement rechercher le code source de FormsAuthentication, créer votre propre logique et remplacer MachineKey par votre propre clé stockée dans web.config ou dans votre base de données. 

Filtre d'authentification personnalisé

Le moyen le plus simple serait de créer un filtre et de vérifier, vérifier, chiffrer les cookies de déchiffrement dans votre filtre. Vous devez le faire sur la méthode OnAuthorization, créer une nouvelle instance de IPrincipal et définir IsAuthenticated sur true si le déchiffrement a abouti.

OAuth

  1. Activez OAuth et créez OAuthProvider. Cependant, vous devrez héberger OAuthProvider sur le serveur qui se trouve sous votre contrôle car cela nécessitera le fonctionnement de machineKey.
  2. Activer OAuth tiers, si vous activez OAuth avec Google, Facebook, etc., ce sera facile, car l'utilisateur sera redirigé vers le fournisseur OAuth. Il continuera à se connecter automatiquement et une nouvelle session sera établie.
1
Akash Kava

J'avais le même problème et dans mon cas, j'utilisais l'assistant Webdeploy to Azure dans VS13. Je pensais que je devenais folle car je mettrais la machinekey dans le web.config et ensuite cela serait changé sur le web.config déployé pour se générer automatiquement. C'est quelque chose dans le script/les paramètres webdeploy. Ma solution consistait à ouvrir le site Azure en direct à partir de VS13 à l'aide de l'explorateur de serveurs, puis à modifier le fichier web.config et à enregistrer les modifications. Cela a préservé mes paramètres avec les clés fournies et tout fonctionne correctement. 

0
Kent Strong