Asp.net
ASP.Net - 在沒有 Windows 使用者的情況下使用基本身份驗證
我們有一個在 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(); } } }