我正在運行Azure網站。無論何時我部署,每個人都會因爲machineKey
更改而被註銷。如何在Azure網站上設置machineKey
我在web.config
中指定了machineKey
,但這並未解決問題。我相信這是因爲Azure會自動覆蓋machineKey
[1]。
我在這裏發現了一些類似的問題,但答案鏈接到死鏈接。
那麼,有什麼解決方案?當然,有一種方法可以讓用戶無論在Azure上進行部署,都可以保持登錄狀態。
我正在運行Azure網站。無論何時我部署,每個人都會因爲machineKey
更改而被註銷。如何在Azure網站上設置machineKey
我在web.config
中指定了machineKey
,但這並未解決問題。我相信這是因爲Azure會自動覆蓋machineKey
[1]。
我在這裏發現了一些類似的問題,但答案鏈接到死鏈接。
那麼,有什麼解決方案?當然,有一種方法可以讓用戶無論在Azure上進行部署,都可以保持登錄狀態。
如果Azure正在重寫您的machineKey,那麼您無法做太多的工作,因爲它是基礎架構的一部分。但是,還有其他方法。
覆蓋FormsAuthentication
這不應該是困難的,因爲你可以很容易地查找了FormsAuthentication的源代碼,並創建自己的邏輯和存儲在web.config中或在你的數據庫自己的密鑰更換的machineKey。
自定義身份驗證篩選
最簡單的方法是創建一個過濾器,檢查,驗證,加密解密cookies在你的過濾器。您需要在OnAuthorization方法上執行此操作,並創建IPrincipal的新實例,並在解密成功時將IsAuthenticated設置爲true。
的OAuth
試圖將機器按鍵部分配置在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 });
}
上述假設您在<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>
但你可以加載來自您喜歡的任何配置來源的實際值。
非常感謝@ haim770。我現在正在測試它,它似乎正在工作。 –
@ Mr.Flibble,我也在一個免費的Azure網站上測試過它。但是,由於Azure網站團隊不斷解鎖越來越多的'Web.Config'部分,我相信他們最終會讓您在配置中正常設置MachineKey。 – haim770
真棒執行@ haim770。看來這不是爲我們工作。我們使用.NET 4.6.1並使用OWIN啓動與app.UseCookieAuthentication()並使用Redis緩存會話提供程序。我實現了上述功能,但用戶在插槽交換後不斷註銷。有任何想法嗎? – gorillapower
我有同樣的問題,在我的情況下,我在VS13中使用webdeploy到Azure嚮導。我以爲我瘋了,因爲我會在web.config中設置機器密鑰,然後它將在部署的web.config上更改爲自動生成。它在webdeploy腳本/設置中。我的解決方案是使用服務器資源管理器從VS13中打開實時Azure站點,然後編輯web.config並保存更改。這保存我的設置與我提供的鍵和一切正常。
以WebRole或通過Azure網站託管的網站? –
一個Azure網站。 –
你確定它沒有使用InProc會話來讓你的用戶註銷嗎?我們使用web.config中指定的machineKey在Azure網站上使用自動縮放進行cookie加密,並且在擴展或新部署時更改機器鍵方面沒有問題。 – jakobandersen