2010年6月17日 星期四

關於RunAs...與Windows驗證的ASP.NET應用程式

從過去幾年教育訓練、專案和產品導入的經驗看起來,台灣的開發人員一般在開發網站的過程當中,實際上使用Windows驗證的場合相當高,但卻讓我很訝異的發現,實際上使用的開發人員卻不多?

很多企業在明明有AD的狀況下,還自己搞了一套SSO(Single Sign On)系統,當然,有些客戶是因為要整合非Windows環境的系統,那也就無可厚非,但卻還是看到不少客戶由於應用系統的建構是長年累月堆積出來的,一開始的Web應用程式並沒有用Windows驗證,導致後面想要做SSO也很困難。

總的來說,驗證這件事情被很多ASP.NET開發人員丟在一邊很久了,導致很多客戶即便有AD,卻總是用自己的資料庫存放帳號密碼,再讓ASP.NET應用程式走Forms驗證。

這也導致很多ASP.NET開發人員壓根沒用過RunAS這個指令。

最近這幾年因為我任職的公司產品的特性,我們開發的ASP.NET網站甚或是Silverlight網站,都採用了Windows驗證,並且搭配Kerberos進行整合驗證動作。也因此,開發人員常常需要透過不同的帳號模擬用戶進行登入,來測試各種不同情境下的使用者功能。

這時候,Windows當中的RunAs指令就相當重要了,你可以在Cmd Line利用底下的指令模擬特定使用者執行某個應用程式,最常用的情境式模擬特定使用者執行瀏覽器:

runas.exe /user:StudyHost.Com\david "C:\Program Files\Internet Explorer\iexplore.exe"

runas.exe /user:david@StudyHost.Com "C:\Program Files\Internet Explorer\iexplore.exe"
上面這樣的指令可以模擬特定的使用者登入瀏覽器,方便開發人員進行測試工作。

如果你懶的每次都要輸入密碼,也可以下底下這樣的指令:

runas.exe /savecred /user:david@StudyHost.Com "C:\Program Files\Internet Explorer\iexplore.exe"
這樣就不用每次重新輸入密碼了。

此外,如果你撰寫的Windows驗證的 ASP.NET應用程式,需要讓使用者登出(或重新用別的帳號登入),可以透過底下的JavaScript:

document.execCommand("ClearAuthenticationCache");

就會有類似MOSS登出使用者的效果了。

3 則留言:

匿名 提到...

您好,請問一下,關於模擬特定的使用者登入瀏覽器,還需不需要再輸入密碼?會不會有安全上的疑慮啊?

謝謝解惑~

David 提到...

若你加了/savecred 則之後不需要。
有,所以要謹慎用,一般來說,我們從來不在正式環境這麼用,這多半是會在development/test環境在使用的小技巧。

WizardWu 提到...

請問老師,能否提供一些您認為比較好的 SSO、AD驗證授權整合、LDAP詳述,不錯的書籍或網路文章嗎?
謝謝。
contempt@pchome.com.tw
我只知道 .net 1.x 時代,有出一本原文書:
The .NET Developer's Guide to Directory Services Programming