2012年6月18日 星期一

Elmah.MVC 2.0.0


之前有說到,Elmah.MVC 已經在 2012-06-16 發佈 2.0.0 的更新了,

之前我們一直使用的版本是 1.3.2,新舊版本的差異性相當地大,所以就覺得有需要做個介紹,

其實最主要的原因是,在 2012-06-14 twMVC 的研討會活動,我所講述的「ASP.NET MVC 偵測監控與 Log 記錄」中,

有向在場的朋友介紹使用 Elmah.MVC,當時所使用的版本仍然是 1.3.2,

雖然 2.0.0 早已經在 2012-06-13 做了 RC 發佈,但當時我是想說應該不會這麼快就有變化,

沒想到上週六(2012-06-16)在家整理專案的時候,一樣是透過 NuGet 安裝 Elmah.MVC,發現到安裝後有很大的不同,

當時心裡就覺得大事不妙,心想著假如有參加過研討會的朋友練習使用 Elmah 然後也安裝了 Elmah.MVC,

發覺到怎麼安裝之後的內容跟我在研討會中所說的不同時,我一定會遭到這些朋友的咒罵,因為是完全兩碼子不同的事!

 

所以就寫一篇文章來說明一下 Elmah.MVC 2.0.0 有什麼樣的不同與變化!


Elmah.MVC 2.0.0

http://nuget.org/packages/Elmah.MVC

image

有關 Elmah.MVC 2.0.0 的更新詳細說明,可以參閱原作者的 blog 文章,

alexander beletsky's development blogELMAH.MVC v.2.0.0 - Release Candidate

其中比較明顯的改變有:

  1. New URL to access ELMAH dashboard
  2. Configurable authorization rules

 

第一點「New URL to access ELMAH dashboard」

新版的 Elmah.MVC 所預設瀏覽 Elmah Dashboard 的路徑將會固定使用「~/elmah」(注意!預設路徑名稱是改不了)

 

第二點「Configurable authorization rules」

在 Elmah.MVC 於 Web.Config 新增的 AppSetting 中就可以設定是否使用表單身份驗證並且指定允許瀏覽的角色權限。

 


安裝 Elmah.MVC 2.0.0

開啟一個專案並且安裝好 Elmah 的 Packages,

SNAGHTMLbd4ba3

 

接著就是使用 NuGet 安裝 Elmah.MVC 2.0.0

image

 

看看安裝後的專案有什麼樣的變化,

 

原本會建立的 Area 「Admin」在新的版本中已經不會建立了,而專案的參考多了一個「Elmah.Mvc」

image

檢視 Elmah.Mvc 裡面的類別

image

image

 

接著可以看到多了一個「App_Start」的目錄,目錄下也多了一個「ElmahMvc_Start.cs」檔案

SNAGHTMLc126b5

 

最後就是看 Web.Config,在 AppSettiongs 中有多了三個 AppSetting,

image

disableHandler 為設定是否不讓 Elmah.MVC 來接手做權限設定,預設為 false(就是仍使用 elmah 原本的權限設定)

requiresAuthentication 為設定是否需要使用權限設定

allowedRoles 為設定允許瀏覽 elmah dashboard 的登入使用者角色權限,如果有多個角色則使用「,」分隔

 

以上就是 Elmah.MVC 的簡單介紹與幾個主要變化的地方。

 

 


設定與使用方法

裝了之後就是要用,但是如果你覺得安裝後的使用不是難事而不繼續往下看的話,你一定會遇到問題!

而且你所遇到的問題一定會讓你摸不著頭緒,所以別怪我說怎麼文章上面沒有講清楚,

因為我文章的「上面」只是簡單的介紹,文章的「下面」才是應該要仔細瞧清楚的地方。

 

如果我們是透過 NuGet 來安裝「Elmah」的話,因為安全性的問題,都會在 elmah 的 section 下增加了 location section,

image

而也因為安全性的考量,所以會建議各位去修改 location 的 path 值,而且也去修改原本的 elmah.axd 名稱,

其實最重要的是,一定要加入 authorization 的設定,要看 elmah dashboard 就一定要經過表單身分驗證的程序,

而且還必須限定只有特定的角色才有瀏覽的權限,

例如修改為以下的設定內容:

image

有關比較詳細的說明,可以參考以下高手的部落格文章:

黑暗執行緒 - ASP.NET保安系列 - 關於elmah.axd的安全設定

demo - 如何偵錯--ELMAH 絕妙的偵錯工具安全架設於ASP.NET MVC

 

如果你透過 NuGet 安裝了 Elmah 以及 Elmah.MVC 之後,假使你已經在 elmah 的 location 區段中有做了權限設定,

然後又接著去設定 Elmah.MVC 的 requiresAuthentication 與 allowedRoles,

這個時候你將會發現到,無論怎麼去修改,兩邊所設定的權限設定都不會是我們想要的結果,

比方說,我們明明有去修改 Elmah.MVC 的 appSetting「disableHandler」為 false(讓 Elmah.MVC 來接管 Elmah),

但是使用「http:// WebSite / elmah.axd」還是會有作用,還是可以用這個路徑去瀏覽 elmah dashboard,

如此就會進入鬼打牆的狀況,無論你怎麼設定就是沒有辦法達到作用,

因為原本的 elmah.axd 這個路徑與設定值還是會有作用,而 Elmah.MVC 的 appSetting 設定就如同虛設。

 

其實作者在他的部落格上面並沒有說得很清楚,所以我這邊跟各位說明一下要怎麼來修改,

我們安裝 Elmah.MVC 的用意,最主要就是不要再使用 elmah.axd 的路徑去瀏覽 dashboard,

而是希望使用正常的路徑去瀏覽,「http:// WebSite / elmah」,

新版的 Elmah.MVC 為了這樣的改變,所以也再增加了「requiresAuthentication」「allowedRoles」這兩個設定,

去對應原本 elmah location 的權限設定。

 

就直接說要怎麼修改好了,

有安裝新版的 Elmah.MVC,就直接用 Elmah.MVC 的 appSetting 設定權限,不必再去使用 elmah 的 location,

那既然不使用的話,就把 elmah location section 給移除(或是註解起來也可以),

image

接著就是再去修改 Elmah.MVC 的 appSetting 設定內容,

記得一定要修改,並且最好是要有表單身分驗證,而且指定可以瀏覽的角色權限,

image

 

這樣一來就可以 disable 原本 elmah.axd 的瀏覽路徑,

image

 

而是必須走「http:// WebSite / elmah」的路徑以及經過身分驗證才能瀏覽 elmah dashboard,

image

image

 

以上的修改就是使用 Elmah.MVC 的必要步驟,不這樣做就不會有作用啦!

 


其實使用 Elmah.MVC 2.0.0 之後,我有遇到一個問題,那就是路徑名稱,Elmah.MVC 2.0.0 是固定並只能用「elmah」,

只能用 elmah 而不能透過修改的方式換成別的名稱,

因為我們原本為了多一層安全防護,原本 elmah.axd 都會建議修改為其他的名稱,ex: blah_ooxx.axd  之類的,

就是不讓別人太容易猜出來,雖然有加上表單身分驗證的防護以及修改 location path 內容,

這些的作法就是為了多一些保護,

之前的版本還可以去修改 AreaName,但是 Elmah.MVC 2.0.0 卻無法修改路徑名稱,

就這個問題我有到作者的部落格去詢問(各位可以到 Elmah.MVC 作者部落格去看),

我用我破破的英文向他詢問這個問題,作者是回答說無法修改路徑名稱,

而且作者認為我無需去為了不讓別人猜出我個 elmah 瀏覽路徑而去修改路徑名稱,

作者認為只要加上表單身分驗證的功能就可以達到資料的安全防護,

嗯……

是沒錯,有加上表單身分驗證是可以做到防護,

但我也不想讓別人就這樣很輕易的猜出或是直接知道我 elmah dashboard 的路徑吧……

 

其實對於這個問題是有方法解決的,不過就下次再說吧!

 

 

Elmah.MVC 對於 Elmah.MVC 2.0.0 的介紹與說明

alexander beletsky's development blogELMAH.MVC v.2.0.0 - Release Candidate

 

 

以上

沒有留言:

張貼留言

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。