ASP.Net - 在没有Windows用户的情况下使用基本身份验证

Rob*_*Day 12 asp.net authentication iis

我们有一个在IIS6上运行的ASP.Net Web应用程序,它管理自己的用户数据库.

站点本身只允许匿名访问,并且使用我们的应用程序本身管理所有身份验证/安全性.

我们有一个页面,其中包含我们导入Excel的HTML数据表,然后用于报告目的.该页面目前没有实现安全性.

我们需要为此页面添加安全性,这样如果这些电子表格落入坏人之手,那么在不提供用户名/密码的情况下,数据就无法"刷新".

如果我将此页面设置为不允许匿名访问,那么我可以使用Windows用户进行基本/ Windows身份验证以保护此页面.然后当Excel刷新数据时,弹出密码对话框.

问题是我需要能够基于数据库中的用户来保护此页面,并且他们不会是Windows用户.我还需要以允许Excel管理身份验证的方式执行此操作,该身份验证不包括任何基于表单的身份验证.

有人有任何想法吗?是否有可能让IIS在其他位置寻找基本身份验证?

Rob*_*Day 11

好的,所以我找到了两个解决这个问题的方法.一个感谢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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Zha*_*uid 5

由于您有一个自定义的用户数据库,我建议您考虑构建一个与您的数据库架构对话的快速成员资格提供程序.

MSDN就"如何:示例成员资格提供程序"提供了一个很好的示例.

然后,您可以使用ASP.NET标准访问控制机制来锁定页面,需要身份验证等,以及Login,LoginStatus等控件,以提供您需要的大部分UI.


编辑添加

快速搜索发现以下内容,这可能会有所帮助:

Web服务安全性 - 没有Active Directory的基本HTTP身份验证

Greg Reinacker在100%托管代码中展示了一个完全工作的示例,演示了如何使用HTTP基本身份验证,使用单独的凭据存储(在本例中为XML文件,尽管这很容易更改为数据库或LDAP存储) ".