Asp.net

ASP.Net - 在沒有 Windows 使用者的情況下使用基本身份驗證

  • August 30, 2013

我們有一個在 IIS6 上執行的 ASP.Net Web 應用程序,它管理自己的使用者數據庫。

該站點本身只允許匿名訪問,並且所有身份驗證/安全性都使用我們的應用程序本身進行管理。

我們有一個頁面,其中包含一個 HTML 數據表,我們將其導入 Excel,然後用於報告目的。該頁面目前未實施任何安全措施。

我們需要為此頁面添加安全性,以便如果這些電子表格落入壞人之手,那麼在不提供使用者名/密碼的情況下無法“刷新”數據。

如果我將此頁面設置為不允許匿名使用者訪問,那麼我可以對 Windows 使用者使用 Basic/Windows 身份驗證來保護此頁面。然後當 Excel 刷新數據時,會彈出密碼對話框。

問題是我需要能夠根據我們數據庫中的使用者來保護這個頁面,他們不會是 Windows 使用者。我還需要以允許 Excel 管理排除任何基於表單的身份驗證的身份驗證的方式來執行此操作。

有人有什麼想法嗎?是否有可能讓 IIS 在其他地方尋找它的基本身份驗證?

好的,所以我找到了解決這個問題的兩種方法。感謝 Zhaph - Ben Duguid 的回答,它是一個允許 ASP.Net 完全管理身份驗證的 HttpModule。

第二種解決方案,也是我要使用的解決方案,是由於這個問題/答案。

通過 IIS 在 ASP Classic 中進行 HTTP 身份驗證(基本或摘要)

我已經把它剝離了,並有一個簡單的測試工具,它似乎執行良好。在此範例中,它僅檢查使用者名和密碼是否匹配並認為已通過身份驗證,而不是數據庫呼叫。

using System;
using System.Text;

namespace AuthenticationTests
{
   public partial class _Default : System.Web.UI.Page
   {
       protected void Page_Load(object sender, EventArgs e)
       {
           string authorisationHeader = Request.ServerVariables["HTTP_AUTHORIZATION"];

           if (authorisationHeader != null && authorisationHeader.StartsWith("Basic ", StringComparison.InvariantCultureIgnoreCase))
           {
               string authorizationParameters = Encoding.Default.GetString(Convert.FromBase64String(authorisationHeader.Substring("Basic ".Length)));
               string userName = authorizationParameters.Split(':')[0];
               string password = authorizationParameters.Split(':')[1];

               if (userName == password) //Perform your actual "login" check here.
               {
                   //Authorised!
                   //Page loads as normal.
               }
               else
               {
                   Unauthorised();
               }
           }
           else
           {
               Unauthorised();
           }
       }

       private void Unauthorised()
       {
           Response.AddHeader("WWW-Authenticate", "Basic");
           Response.Status = "401 Unauthorized";
           Response.End();
       }
   }
}

引用自:https://stackoverflow.com/questions/1887323