advapi32.dll を使用して、Windows API によって提供されるさらに単純な方法があります。
例:
[DllImport("advapi32.dll", EntryPoint = "LogonUserW", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool LogOnUser(string lpszUserName, string lpszDomain, string lpszPassword,
int dwLogOnType, int dwLogOnProvider, ref IntPtr phToken);
このメソッドは、ユーザーが実際にドメイン内にいて、パスワードを正しく入力した場合に true または false を返します。次に、 advapi32.dll に対して認証をチェックする独自のサインイン メソッドを作成します。
public ActionResult SignIn(SignInModel model)
{
string domainName = CheckSignIn.GetDomainName(model.User.UserName);
string userName = CheckSignIn.GetUserName(model.User.UserName);
IntPtr token = IntPtr.Zero;
bool result = CheckSignIn.LogOnUser(userName, domainName, model.User.UniqueUserCode, 2, 0, ref token);
if (result)
{
if (!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) && Request.QueryString["ReturnUrl"] != "/")
{
FormsAuthentication.RedirectFromLoginPage(model.User.UserName, false);
}
else
{
FormsAuthentication.SetAuthCookie(model.User.UserName, false);
return RedirectToAction("MyVoyages", "Voyage");
}
}
return SignIn(true);
}
シンプルだけどパワフル。