2015-04-12 38 views
22

Azure Web sitesi çalıştırıyorum. Ne zaman dağıtırsam, machineKey değiştiği için herkes oturumu kapatır.Azure Web sitesinde makineKey nasıl ayarlanır

web.config numaralı telefondan machineKey numarasını belirledim, ancak bu sorunu çözmedi. Bunun nedeni Azure'un otomatik olarak machineKey[1]'un üzerine yazmasıdır.

Burada birkaç benzer soru buldum, ancak cevaplar ölü bağlantılara bağlanıyor.

Peki, çözüm nedir? Elbette, kullanıcıların Azure'daki dağıtımlara bakılmaksızın oturum açmasının bir yolu vardır.

+1

WebRole veya Azure Web siteleri aracılığıyla barındırılan bir web sitesi? –

+0

Bir Azure Web Sitesi. –

+0

Kullanıcılarınızın oturumunu açan InProc oturumunun kullanılmadığından emin misiniz? Otomatik ölçeklemeyi kullanarak bir Azure Web Sitesinde çerez şifrelemesi için web.config'te belirtilen machineKey'yi kullanıyoruz. Ayrıca, ölçeklemede veya yeni dağıtımlarda machinekey'leri değiştirmekle ilgili hiçbir sorunumuz yok. – jakobandersen

cevap

0

Azure makinenizi yeniden yazıyorsa, altyapısının bir parçası olduğu için bu konuda fazla bir şey yapamazsınız. Ancak başka yöntemler de var.

geçersiz kıl FormsAuthentication

kolayca FormsAuthentication kaynak kodu aramak ve kendi mantığı oluşturmak ve web.config'de veya veritabanında saklanan kendi anahtarı ile MachineKey yerini alabilir gibi bu zor olmamalı.

Özel Kimlik Filtre

basit yolu bir filtre oluşturarak kontrol doğrulamak, filtrenizde çerezleri şifresini şifrelemek olacaktır. OnAuthorization yönteminde bunu yapmalı ve yeni bir IPrincipal örneği oluşturmalı ve çözme işlemi başarılı olursa, IsAuthenticated değerini true olarak ayarlamalısınız.

OAuth

  1. OAuth'u etkinleştirme ve OAuthProvider oluşturun. Ancak, makinenizde OAuthProvider'ı kontrol etmeniz ve makinenizde makinenin çalışmasını gerektirecektir.
  2. Üçüncü Şahıs OAuth'ı Etkinleştir, OAuth'u Google, Facebook vb. Ile etkinleştirirseniz, kullanıcının OAuth sağlayıcısına yönlendirilmesi kolay olacak ve otomatik olarak oturum açmaya devam edecek ve yeni bir oturum oluşturulacaktır.
15

deneyin Application_Start üzerine makine anahtar yapılandırma bölümüne sıfırlamak için:

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 }); 
} 

Yukarıdaki <appSettings> bölümünde uygun değerleri ayarlamak varsayar:

<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> 

Ama yükleyebilirsiniz senin Beğendiğiniz herhangi bir yapılandırma kaynağından gerçek değerler.

+0

Teşekkür ederim çok @ haim770. Bunu şimdi test ediyorum ve çalışıyor gibi görünüyor. –

+1

@ Mr.Flibble, bunu ücretsiz bir Azure Web Sitesinde de test ettim. Ancak, Azure Websiteleri ekibi sürekli olarak Web.Config'in daha fazla bölümünün kilidini açtığından, sonunda MachineKey'i normalde yapılandırmada ayarlamanıza izin vereceğine inanıyorum. – haim770

+0

Awesome application @ haim770. Bu bizim için çalışmıyor gibi görünüyor. .NET 4.6.1 kullanıyor ve OWIN açılışını app.UseCookieAuthentication() kullanarak ve Redis önbellek oturum sağlayıcısı kullanarak kullanıyoruz. Yukarıdakileri uyguladım, ancak kullanıcı bir slot değişiminden sonra çıkış yapmaya devam ediyor. Herhangi bir fikir? – gorillapower

0

Aynı sorun vardı ve benim durumumda VS13'teki Azure sihirbazını webdeploy kullanıyordum. Web.config'te machinekey'i ayarlayacağım için deli olduğumu düşünmüştüm ve sonra otomatikleştirilecek web.config dosyasında değiştirilecekti. Webdeploy komut dosyasında/ayarlarında bir şey var. Benim çözümüm, Canlı Azure sitesini VS13'ün içinden Sunucu Gezgini'ni kullanarak açmak ve ardından web.config dosyasını düzenlemek ve değişiklikleri kaydetmek oldu. Bu benim verilen anahtarlar ile ayarlarımı korudu ve tüm işleri iyi.

İlgili konular