Я отладил решение с помощью IIS Express, и когда я ввел свои учетные данные в диалог аутентификации Windows, мои правильные учетные данные были найдены в переменной logonUserIdentity.
Насколько я знаю, IIS express использует текущую учетную запись компьютера в качестве учетной записи анонимного входа. Таким образом, вы обнаружите, что logonUserIdentity является правильным. Вы можете попробовать войти в приложение с другой учетной записью домена. Вы обнаружите, что он по-прежнему использует текущую учетную запись компьютера, но не измененную на учетную запись пользователя.
Поскольку микс-аутентификация допускает несколько способов входа, вы всегда должны разрешать анонимный вход, чтобы позволить человеку, который не имеет учетной записи домена.
Смешанный собственный аутентификатор использует внешний вход asp.net для внешнего входа в систему для входа в систему с помощью windows. Сначала внешний логин asp.net будет идти к поставщику mixauth для проверки результата аутентификации Windows.
В случае успеха он вернется к методу ExternalLoginCallback контроллера учетной записи с информацией о Windows и будет использовать эту информацию для идентификации пользователя.
По моему мнению, если вы хотите получить текущий логин пользователя, я предлагаю вам попробовать использовать сеанс для сохранения логина 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 });
}
}
Результат:
![enter image description here](https://i.stack.imgur.com/YMvW9.png)