簡體   English   中英

實時測試ASP.NET自定義角色提供程序

[英]Live testing ASP.NET custom Role Provider

使用ASP.NET Webforms + VB / C#

我的任務是限制ASP.NET頁面訪問權限不屬於特定角色的用戶。 而且我需要能夠對我的解決方案進行實時測試(與可以使用模擬或偽造品的單元測試相比)。 我們的網站相當復雜,因此我懷疑我僅通過單元測試就能找到所有的“陷阱”。

我肯定在開發計算機上有東西,我肯定可以在生產環境中使用:我有一個自定義的角色提供程序,已連接到web.config文件中。 我在調試網站時正在初始化和調用它,因此我可以肯定地確定它可以正常工作。 我有一個僅標記了特定角色的文件夾(“管理”)。 我們的角色是在我們自己的數據庫中定義的,與Microsoft或Windows的角色/權限無關。

問題是:我實際上無法以要調試的用戶身份登錄。 我可以使用特殊的僅用於開發的起始頁來“模擬”此操作。 對於從角色數據庫構建的菜單/導航項,這行之有效,但是當然不限制頁面(使用“角色提供程序”或類似功能),您仍然可以手動鍵入頁面並將其提供。 這個僅開發的起始頁面將我傳遞的用戶名設置為FormsAuthentation身份驗證cookie。

FormsAuthentication.Initialize()
FormsAuthentication.SignOut()
FormsAuthentication.SetAuthCookie(simUserName, True)

好像當我第一次開始調試時(通常是在重新啟動后),將使用與我模擬的用戶名相同的用戶名調用自定義角色提供程序,但過一會兒,該程序突然停止並且改用了我的本地Windows名稱。 (Cookie問題?)之后,它不再起作用。

無論如何-有沒有一種方法可以在開發過程中本地測試角色,還是只需要將其投入生產並希望達到最佳狀態。

我目前不知道哪些代碼或設置會有用,所以請告訴我您需要什么。 謝謝!

我想我已經找到解決問題的方法。 我決定使用Ch中的一些樣本。 Barry Dorrans(由Wrox出版)的《 Beginning ASP.NET Security》的第7冊希望通過簡單的示例使用身份驗證和授權可能會導致解決方案,但確實如此。

使用表單身份驗證的示例之一(第155-157頁)顯示了一個簡單的login.aspx頁面,類似於我的開發啟動頁面。 我在開發啟動頁面(如上所示)中的代碼不正確。 應該是:

FormsAuthentication.Authenticate(simUserName, simUserPassword)
FormsAuthentication.RedirectFromLoginPage(simUserName, False)

我還在開發web.config中定義了模擬用戶:

<authentication mode="Forms">
  <forms defaultUrl="default.aspx" loginUrl="mystart.aspx">
    <credentials passwordFormat="Clear">
      <user name="GeorgeWashington" password="password"/>
      <user name="AndrewJackson" password="password"/>
      <user name="AbrahamLincoln" password="password"/>
      <user name="TeddyRoosevelt" password="password"/>
      <user name="JackKennedy" password="password"/>
    </credentials>
  </forms>
</authentication>

調用FormsAuthentication.Authenticate並對我選擇的每個模擬用戶進行身份驗證時,似乎導致ASP.NET現在始終在對角色提供程序的調用中使用此用戶名。 至少,這在調試網站時似乎有效。

我將項目設置為始終調用我的開發啟動頁面(登錄頁面-mystart.aspx)。 這樣,在需要使用其他角色的情況下,我總是從全新的身份驗證開始。

任何想要使用此解決方案的人, 警告切勿將“開發”啟動頁面用於生產網站。 同樣, 切勿在Production web.config中使用用戶名和密碼。 用於調試和測試。 根據版本控制開發和生產代碼的方式,可能必須手動合並從開發到生產的某些更改,以避免將此調試代碼發送到生產。

我也了解Microsoft希望我們使用Membership Provider代替FormsAuthentication類。 在生產代碼中,我們應該這樣做。 但是出於我的目的(確保在調試時可以與不同的用戶/角色進行網站交互),這似乎是最簡單的解決方案。

編輯 -還有一個難題:我的自定義角色提供程序中仍然收到奇怪的方法調用。 幾次會使用我在登錄頁面上登錄時使用的用戶名調用方法(這是我所期望的); 經常是我的Windows用戶名,害得我相信仍然被使用ASP.NET 某處的Windows授權。 經過更多研究(謝謝!!!!),我在我的項目的applicationhost.config文件中發現Windows身份驗證設置為True,我認為這與web.config文件引起了沖突。 將applicationhost.config中的值設置為:

<location path="MyWebSite">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="true" />
                <windowsAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>

似乎已經解決了這個問題。

如果您有任何疑問,或需要更多信息,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM