我们有一个在IIS6上运行的ASP.Net Web应用程序,它管理着自己的用户数据库.
网站本身只允许匿名访问,所有的身份验证/安全性都是使用我们的应用程序本身来管理的.
我们有一个页面,其中包含我们导入到Excel中的HTML数据表,然后用于报告.该页面目前没有实现安全性.
我们需要增加这个页面的安全性,所以如果这些电子表格落在错误的手中,那么数据不能“刷新”,而不提供用户名/密码.
如果我将此页面设置为不允许Anonymouse访问,那么我可以使用Windows用户的Basic / Windows身份验证,以确保此页面的安全.然后当Excel刷新数据时弹出密码对话框.
问题是我需要能够根据数据库中的用户来保护这个页面,而不会是Windows用户.我还需要这样做,这样可以让Excel管理不包含基于表单的身份验证的身份验证.
任何人有任何想法?是否可以让IIS查看其他地方的基本身份验证?
解决方法
好的,所以我找到了这个问题的两个解决方案.感谢Zhaph – Ben Duguid的答案,这是一个允许ASP.Net完全管理身份验证的HttpModule.
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(); } } }