2012-10-05 51 views
3

由於Auto-Scaling不允許緩衝期和/或智能程度不足,因此只允許「新請求」進入由於自動縮放而關閉的實例,因此我試圖避免使用ELB提供的粘性會話。否則,這種行爲將使一些客戶登錄屏幕。如何同步AWS EC2中的機器密鑰?

該網站和其他RESTful web服務正在IIS7中運行。該網站使用經典的基於表單的身份驗證(MVC3中的內置成員資格提供程序),但不久將遷移到自定義成員資格提供程序以查看cookie並解密,然後提供結論。 REST風格的Web服務已經在使用自定義成員資格提供程序。

在這種情況下,我認爲我不能通過ELB使用粘性會話的網站。

REST風格的webservices的ELB可以配置爲非粘性,因爲他們會在每個請求中單獨觀察cookie,以查看auth令牌是否存在一些加密值。但是,這裏的問題是FormsAuthentication.Enrypt和FormsAuthentication.Decrypt方法,它們使用MachineKeys。對 ?!如果沒有,那麼它沒有問題,但如果他們這樣做,那麼如何在EC2中的自動擴展實例中同步機器密鑰?

回答

0

由於推薦的網站似乎遭到黑客攻擊(http://aspnetresources.com/tools/machineKey),我會建議使用以下方法來代替:

  1. 打開IIS管理器
  2. 選擇您所管理
  3. 在ASP網站.NET部分,選擇Machine Key(閱讀下面如果你沒有看到這個部分)
  4. 取消選中Automatically generate at runtimeGenerate unique keys for each application
  5. 點擊Generate Keys在操作菜單,然後單擊Apply
  6. 打開web.config<machineKey>標籤複製到其他Web服務器的Web場中,使它們都使用相同的machineKey

另外,你贏了」沒有任何網站記錄你的IP地址和生成的機器密鑰(如果我們正在玩世不恭)。


如果你沒有在你的IIS管理器中的ASP.NET部分,可以使用下列步驟來啓用它(從https://serverfault.com/questions/129714/asp-net-area-in-iis-7-on-windows-2008):

的Windows 7,您可以啓用控制面板中的ASP.NET - >程序 - >程序和功能 - >打開或關閉Windows功能。 展開Internet信息服務 - >萬維網服務 - >應用程序開發功能,然後單擊ASP.NET。在角色服務中單擊添加角色 - >選擇Web服務器(IIS) - >單擊ASP.NET,它將提示輸入必要的相關角色服務單擊添加所需的角色服務。

5

最佳做法是生成機器密鑰並放入web.config文件中。這種方式作爲自動縮放開始和停止實例時,鍵將始終爲常量,而不依賴於實際實例。

+0

看起來很有希望。我會試試看,然後標記你的答案。所以基本上你說我可以通過webconfig爲webservices配置machinekeys,然後FormsAuthentication.Encrypt和FormsAuthentication.Decrypt將使用這些machinekeys,而不是那些隨實例一起提供的。對 ? – dparkar

+0

這是正確的。 –