我们有一个在 IIS6 上运行的 ASP.Net Web 应用程序,它管理自己的用户数据库。
该站点本身只允许匿名访问,所有身份验证/安全性都使用我们的应用程序本身进行管理。
我们有一个页面,其中包含我们导入 Excel 的 HTML 数据表,然后用于报告目的。该页面目前没有实现安全措施。
我们需要为此页面添加安全性,以便如果这些电子表格落入坏人之手,则在不提供用户名/密码的情况下无法“刷新”数据。
如果我将此页面设置为不允许匿名访问,那么我可以对 Windows 用户使用基本/Windows 身份验证以保护此页面。然后,当 Excel 刷新数据时,会弹出密码对话框。
问题是我需要能够根据我们数据库中的用户来保护这个页面,他们不会是 Windows 用户。我还需要以允许 Excel 管理排除任何基于表单的身份验证的身份验证的方式来执行此操作。
有人有任何想法吗?是否有可能让 IIS 在其他地方寻找它的基本身份验证?
最佳答案
好的,所以我找到了两个解决此问题的方法。感谢 Zhaph - Ben Duguid 的回答,这是一个 HttpModule,它允许 ASP.Net 完全管理身份验证。
第二个解决方案,也是我要使用的解决方案,多亏了这个问题/答案。
HTTP Authentication (Basic or Digest) in ASP Classic via IIS
我已经把它去掉了,并有一个简单的测试工具,它似乎运行良好。在此示例中,它仅检查用户名和密码是否匹配并认为已通过身份验证,而不是数据库调用。
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();
}
}
}
关于ASP.Net - 在没有 Windows 用户的情况下使用基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1887323/