После бесчисленных попыток мой логин не работает. Я не могу понять для меня, почему. Не уверен, что проблема в моем C# коде или HTML коде. В моей всплывающей форме вы вводите свои учетные данные, и он перенаправляет вас на страницу по умолчанию. Это тоже не помогает, и я надеюсь, что кто-то может мне помочь!
Вот мой HTML -
<form class="form-container">
<h1>Login</h1>
<p style="text-align:center">Please login using your <strong><em>User ID and Password</em></strong></p>
<label for="Login"><b>User ID</b></label>
<input type="text" placeholder="Enter User ID" name="Login" required="" id="username" />
<label for="password"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="password" required="" id="Password" />
<button type="submit" class="btn" onclick="CheckUserLogon">Login</button>
<button type="button" class="btn cancel" onclick="closeForm()">Close</button>
</form>
<script>
function CheckUserLogon() {
var objButton = document.getElementById("CheckUserLogon");
objButton.click();
Response.Redirect("~/WebForm1.aspx");
}
function openForm() {
document.getElementById("myForm").style.display = "block";
}
function closeForm() {
document.getElementById("myForm").style.display = "none";
}
</script>
Вот мой C# код -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Security.Principal;
using System.Runtime.InteropServices;
using System.DirectoryServices.AccountManagement;
using System.Web.Services;
using System.Web.Services.Protocols;
namespace PMOLogin
{
public partial class Login: System.Web.UI.Page
{
public class UserValidation
{
[DllImport("advapi32.dll", SetLastError = true, BestFitMapping = false, ThrowOnUnmappableChar = true)]
[
return :MarshalAs(UnmanagedType.Bool)
]
internal static extern bool LogonUser
(
[MarshalAs(UnmanagedType.LPStr)] string pszUserName,
[MarshalAs(UnmanagedType.LPStr)] string pszDomain,
[MarshalAs(UnmanagedType.LPStr)] string pszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken
);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr handle);
public enum LogonType
{
/// <summary>
/// This logon type is intended for users who will be interactively using the computer, such as a user being logged on
/// by a terminal server, remote shell, or similar process.
/// This logon type has the additional expense of caching logon information for disconnected operations;
/// therefore, it is inappropriate for some client/server applications,
/// such as a mail server.
/// </summary>
LOGON32_LOGON_INTERACTIVE = 2,
/// <summary>
/// This logon type is intended for high performance servers to authenticate plaintext passwords.
/// The LogonUser function does not cache credentials for this logon type.
/// </summary>
LOGON32_LOGON_NETWORK = 3,
/// <summary>
/// This logon type is intended for batch servers, where processes may be executing on behalf of a user without
/// their direct intervention. This type is also for higher performance servers that process many plaintext
/// authentication attempts at a time, such as mail or Web servers.
/// The LogonUser function does not cache credentials for this logon type.
/// </summary>
LOGON32_LOGON_BATCH = 4,
/// <summary>
/// Indicates a service-type logon. The account provided must have the service privilege enabled.
/// </summary>
LOGON32_LOGON_SERVICE = 5,
/// <summary>
/// This logon type is for GINA DLLs that log on users who will be interactively using the computer.
/// This logon type can generate a unique audit record that shows when the workstation was unlocked.
/// </summary>
LOGON32_LOGON_UNLOCK = 7,
/// <summary>
/// This logon type preserves the name and password in the authentication package, which allows the server to make
/// connections to other network servers while impersonating the client. A server can accept plaintext credentials
/// from a client, call LogonUser, verify that the user can access the system across the network, and still
/// communicate with other servers.
/// NOTE: Windows NT: This value is not supported.
/// </summary>
LOGON32_LOGON_NETWORK_CLEARTEXT = 8,
/// <summary>
/// This logon type allows the caller to clone its current token and specify new credentials for outbound connections.
/// The new logon session has the same local identifier but uses different credentials for other network connections.
/// NOTE: This logon type is supported only by the LOGON32_PROVIDER_WINNT50 logon provider.
/// NOTE: Windows NT: This value is not supported.
/// </summary>
LOGON32_LOGON_NEW_CREDENTIALS = 9,
}
public enum LogonProvider
{
/// <summary>
/// Use the standard logon provider for the system.
/// The default security provider is negotiate, unless you pass NULL for the domain name and the user name
/// is not in UPN format. In this case, the default provider is NTLM.
/// NOTE: Windows 2000/NT: The default security provider is NTLM.
/// </summary>
LOGON32_PROVIDER_DEFAULT = 0,
LOGON32_PROVIDER_WINNT35 = 1,
LOGON32_PROVIDER_WINNT40 = 2,
LOGON32_PROVIDER_WINNT50 = 3
}
[System.Web.Services.WebMethod]
//[SoapDocumentMethod(OneWay = true)]
public static void CheckUserLogon(string username, string Password)
{
const int LOGON32_LOGON_NEW_CREDENTIALS = 9;
const int LOGON32_PROVIDER_WINNT50 = 3;
IntPtr hToken = IntPtr.Zero;
bool retval;
retval = LogonUser(username, "ap", Password, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, ref hToken);
}
}
}
}
Когда я нажимаю на кнопку входа в систему, я полагаю, что я вошел в систему, и предполагается, что WebForm1 открывается, вместо этого ничего не происходит. Я добавил method="get"
в мою форму, и он все еще делает то же самое. Не совсем уверен, где go, так как я добавил все, что мог, с точки зрения сценария и нажатия кнопки. Может быть что-то не так с моим C# методом CheckUserLogon
. На данный момент, все было бы полезно.