Идентификатор входа в ASP.NET MVC без пароля
Мне было дано задание изменить приложение ASP.NET MVC таким образом, чтобы серфинг на myurl? username = xxxxxx автоматически включал пользователя xxxxxx без запроса паролей.
Я уже ясно дал понять, что это ужасная идея для многих причин и сценариев, связанных с безопасностью, но ответственные люди определены. Сайт не будет общедоступным.
Итак: есть ли способ входа без пароля, например, расширение Microsoft.AspNet.Identity.UserManager и изменение AccountController?
Некоторые коды:
var user = await _userManager.FindAsync(model.UserName, model.Password);
if (user != null && IsAllowedToLoginIntoTheCurrentSite(user))
{
user = _genericRepository.LoadById<User>(user.Id);
if (user.Active)
{
await SignInAsync(user, model.RememberMe);
_userManager содержит экземпляр Microsoft.AspNet.Identity.UserManager.
и SignInAsync():
private async Task SignInAsync(User user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
if (user.UserGroupId.IsSet())
user.UserGroup = await _userManager.Load<UserGroup>(user.UserGroupId);
//adding claims here ... //
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, new CustomClaimsIdentity(identity));
}
AuthenticationManager будет OwinSecurity.
Ответы
Ответ 1
Вам просто нужно использовать usermanager, чтобы найти пользователя по имени. Если у вас есть запись, тогда просто подпишите их.
public ActionResult StupidCompanyLogin()
{
return View();
}
[HttpPost]
//[ValidateAntiForgeryToken] - Whats the point? F**k security
public async Task<ActionResult> StupidCompanyLogin(string name)
{
var user = await UserManager.FindByNameAsync(name);
if (user != null)
{
await SignInManager.SignInAsync(user, true, true);
}
return View();
}
Ответ 2
Возможно ли использовать это решение, если пользователь еще не вошел на ваш сайт, но он сохранен в базе данных, то есть в вашей тестовой среде?