關於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利用底下的指令模擬特定使用者執行某個應用程式,最常用的情境式模擬特定使用者執行瀏覽器:
如果你懶的每次都要輸入密碼,也可以下底下這樣的指令:
此外,如果你撰寫的Windows驗證的 ASP.NET應用程式,需要讓使用者登出(或重新用別的帳號登入),可以透過底下的JavaScript:
就會有類似MOSS登出使用者的效果了。
很多企業在明明有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登出使用者的效果了。
留言
謝謝解惑~
有,所以要謹慎用,一般來說,我們從來不在正式環境這麼用,這多半是會在development/test環境在使用的小技巧。
謝謝。
contempt@pchome.com.tw
我只知道 .net 1.x 時代,有出一本原文書:
The .NET Developer's Guide to Directory Services Programming