前言
最近同事詢問將程式裝到 2 台機器上去,透過 Load Balancing 時,Session 取得到,但是 Forms 驗證卻會失敗, context.User.Identity 有值, context.User.Identity.IsAuthenticated 卻是 false。
研究
context.User.Identity 有值, context.User.Identity.IsAuthenticated 卻是 false 似乎是驗證授權沒有設定吧!
於是詢問是否有設定 Authorization 。
請注意,如果您設定了 Forms 驗證後,卻沒有設定 Authorization 的話,那預設是所有人都可以去 Access 的哦。也因為這樣子,所以 context.User.Identity 有值, context.User.Identity.IsAuthenticated 卻是 false。
詳細可參考:ASP.NET Authorization
The default configuration for ASP.NET contains an
element, which authorizes all users.
設定 authorization 後,就進不去了。 這才是合理的。
1 |
|
話說,雖然合理了,但還是進不去,到底怎麼回事呢?
於是請同事參考 [ASP.NET]多個 Web Application 使用同一個 Forms Authentication 裡面在 Application_BeginRequest 測試的方式,測試果然在 FormsAuthentication.Decrypt 時會噴錯。 通常會噴錯有幾個問題, machineKey, .NET Framework, .NET 組件不同。
但程式是一樣的,環境也是一樣的,web.config 也是相同的呀!
….
後來同事說,將 web.config 中的 machineKey 的值,用 Copy 的方式,貼到另一個 web.config 就可以了。
那之前為什麼不行呢?
因為他不是直接貼到 web.config 之中,而是透過 iis 設定到 web.config 之中。
雖然看起來是一樣的,但或許有些肉眼是看不出來的….
下次還是直接用 Copy 就好了…
Anyway 總算是解決了…
非常感謝 皇任 及 嘉棋 同事的分享。 ^_^
參考資料
ASP.NET Authorization
Setting authorization rules for a particular page or folder in web.config
[ASP.NET]多個 Web Application 使用同一個 Forms Authentication