我使用 IIS Express 调试了解决方案,当我在 Windows 身份验证对话框中输入我的凭据时,我在 logonUserIdentity 变量中找到了正确的凭据。
据我所知,IIS express 使用当前计算机登录帐户作为匿名登录帐户。所以你会发现 logonUserIdentity 是对的。您可以尝试使用不同的域帐户登录应用程序。您会发现它仍然使用当前计算机登录帐户,没有更改为登录用户帐户。
由于混合身份验证允许多种方式登录,因此您应该始终启用匿名登录以让没有域帐户的人。
mix自己的认证使用asp.net身份外部登录实现windows登录。asp.net身份外部登录会先到mixauth提供者检查windows认证结果。
如果成功,它将使用 windows 信息返回帐户控制器的 ExternalLoginCallback 方法,并使用此信息身份将生成身份用户。
在我看来,如果你想获取当前用户的登录信息,我建议你可以尝试使用 session 将 windows 登录信息存储在 ExternalLoginCallback 方法中的用户帐户中。
更多细节,您可以参考以下代码:
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
Session["LoginonUsername"] = loginInfo.DefaultUserName;
if (loginInfo == null)
{
return RedirectToAction("Login");
}
// Sign in the user with this external login provider if the user already has a login
var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
case SignInStatus.Failure:
default:
// If the user does not have an account, then prompt the user to create an account
ViewBag.ReturnUrl = returnUrl;
ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });
}
}
结果: