通过NTLM冒充用户(Impersonating users through NTLM)

2019-06-28 04:29发布

我有一个有安全的两个层面的内部应用程序。 FormsAuthentication为管理界面面向客户的应用程序和NTLM集成身份验证。

我可以很容易地通过只是创造与FormsAuthentication类的方法正确.ASPXAUTH饼干模拟客户端。 但是生成HTTP认证报头NTLM超出了我那么远。

我有我的希望,当我发现这篇文章( http://msdn.microsoft.com/en-us/library/ms998358.aspx#paght000025_usingimpersonation ),但后来我意识到,这只是创建了一个上下文在一段时间运行代码的请求。 我想转我的整个会话,使服务器以为我在使用其他域登录。 我有我的帐户管理权限,所以它不是胡闹或窃取域密码的目的。

它甚至有可能? 谢谢。

Answer 1:

比方说您有窗体身份验证启用ASP.NET应用程序的登录表单login.aspx的和您的用户存储在数据库中。 现在你想支持,窗体和Windows身份验证。 我就是做这个的:

对于窗体身份验证我使用SQL与数据库,让说,用户表。 我添加到名为WindowsUserName此表的新列中,我将在形式的计算机\用户保存Windows用户名

在login.aspx的形式I添加一个方法,该方法将发送将显示登录窗口的响应:

private void ActivateWindowsLogin()
{
    Response.StatusCode = 401;
    Response.StatusDescription = "Unauthorized";
    Response.End();
}

地方我都像一个链接<a href="login.aspx?use=windows">Admin</a>

在login.aspx的Page_Load中我已经加入:

if (Request.QueryString["use"] == "windows")
{
    var windowsuser = Request.ServerVariables["LOGON_USER"];
    if (windowsuser.Length == 0)
        ActivateWindowsLogin();
    else
    {
        // get userId from DB for Windows user that was authenticated by IIS
        // I use userId in .ASPXAUTH cookie
        var userId = GetUserIdForWindowsUser(windowsuser);
        if (userId > 0) //user found
        {
            // here we get User object to check roles or other stuff
            var user = GetApplicationUser(userId);
            // perform additional checks here and call ActivateWindowsLogin()
            // to show login again or redirect to access denied page.
            // If everythig is OK, set cookie and redirect
            FormsAuthentication.SetAuthCookie(userId.ToString(), false);
            Response.Redirect(FormsAuthentication.GetRedirectUrl(userId.ToString(), false), true);
        }
        else //user not found
            ActivateWindowsLogin();
    }
}
else
{
    //your Forms auth routine
}

GetUserIdForWindowsUser和GetApplicationUser是我的方法只是样品。



文章来源: Impersonating users through NTLM