Идентификатор входа в 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

Возможно ли использовать это решение, если пользователь еще не вошел на ваш сайт, но он сохранен в базе данных, то есть в вашей тестовой среде?