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

标签 asp.net iis authentication

我们有一个在 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/

相关文章:

c# - 截断时间将列表转换为可为空

asp.net - 链接按钮的中心内容

asp.net - 本地主机站点,输出随机文本

linux - 在 SSH 登录后加载一些别名

javascript - Auth0邮箱确认,如何优雅的处理注册

c# - 从 C# 中的另一个页面调用函数

asp.net - Web.config 中连接字符串的数据源

c# - 单例运行在 Asp.Net web 应用程序上

asp.net - IIS 中是否有类似 cron 作业的东西?

Laravel 5.2 身份验证更改 'users' 表