asp.net WindowsIdentity模拟已知凭据C#

时间:2012-01-30 15:44:22

标签: c# asp.net

早上好,

我有一个asp.net项目,其中表单(身份验证设置为无)验证针对第三方服务器的用户凭据,然后在验证时,将用户重定向到受保护的内容。

我想要做的是从这些凭据创建一个WindowsIdentity,以便我可以访问我服务器上的其他WindowsAuthentication页面以及网络上的其他页面。

这可能吗?

2 个答案:

答案 0 :(得分:1)

您需要使用LogonUser API函数来模拟您的通话(您还需要帐户登录名和密码,因此您可以使用此功能)。

看看这篇文章,它解释了如何做到这一点:http://msdn.microsoft.com/en-us/library/ff647404.aspx

这是本文的代码片段,只是为了了解这种方法。

    try
    {
        // Create a token for DomainName\Bob
        // Note: Credentials should be encrypted in configuration file
        bool result = LogonUser("Bob", "DomainName",
                                "P@ssw0rd",
                                LogonSessionType.Network,
                                LogonProvider.Default,
                                out token);
        if (result)
        {
            WindowsIdentity id = new WindowsIdentity(token);

            // Begin impersonation
            impersonatedUser = id.Impersonate();
            // Log the new identity
            Response.Write(String.Format(
                           "</p>Identity after impersonation: {0}<br>",
                           WindowsIdentity.GetCurrent().Name));
            // Resource access here uses the impersonated identity
        }
        else
        {
            Response.Write("</p>LogonUser failed: " +
                           Marshal.GetLastWin32Error().ToString());
        }
    }
    catch
    {
        // Prevent any exceptions that occur while the thread is 
        // impersonating from propagating
    }
    finally
    {
        // Stop impersonation and revert to the process identity
        if (impersonatedUser != null)
            impersonatedUser.Undo();
        // Free the token
        if (token != IntPtr.Zero)
            CloseHandle(token);
    }

答案 1 :(得分:0)

这是a similar question,其中ASP.NET在请求期间模拟Windows用户。