關於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登出使用者的效果了。

留言

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

謝謝解惑~
David表示…
若你加了/savecred 則之後不需要。
有,所以要謹慎用,一般來說,我們從來不在正式環境這麼用,這多半是會在development/test環境在使用的小技巧。
WizardWu寫道…
請問老師,能否提供一些您認為比較好的 SSO、AD驗證授權整合、LDAP詳述,不錯的書籍或網路文章嗎?
謝謝。
contempt@pchome.com.tw
我只知道 .net 1.x 時代,有出一本原文書:
The .NET Developer's Guide to Directory Services Programming

這個網誌中的熱門文章

原來使用 .net 寫個 MCP Server 如此簡單

使用LM Studio輕鬆在本地端以API呼叫大語言模型(LLM)

開啟 teams 中的『會議轉錄(謄寫)』與Copilot會議記錄、摘要功能

在VS Code當中使用 Azure DevOps MCP Server

原來使用 .net 寫個 MCP Client 也如此簡單