2015-01-23 1 views
14

Мне присвоено назначение модификации приложения ASP.NET MVC таким образом, что при серфинге на myurl? Username = xxxxxx автоматически регистрируется пользователь xxxxxx без запроса паролей.Вход для входа в систему ASP.NET MVC без пароля

Я уже ясно дал понять, что это ужасная идея по многим причинам и сценариям, связанным с безопасностью, но ответственные люди определены. Сайт не будет общедоступным.

Итак: есть ли способ входа без пароля, например, расширение 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.

+0

Покажите нам свой 'login' код :) –

+1

... и, конечно, ни одна компания никогда не имеет проблем с инсайдерских угроз * кашель * Сноуден * кашель *. Что касается вашего вопроса, да, это легко. Сделать вещи менее безопасными всегда есть. У меня возникнет соблазн установить пароль каждого пользователя на пустую строку и использовать ее неявно (быстро «грязно, но это будет работать, а также указать, что ваша безопасность бесполезна одновременно»). Если вы хотите сделать это «правильно», вы можете подклассифицировать поставщиков auth – Basic

+0

@AndyRefuerzo: Я добавил соответствующий код. – Bjorn

ответ

36

Вам просто нужно использовать 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(); 
    } 
+16

Удивительные имена! –

+0

Это действительно сработало, я думал, что это будет скорее хлопот. Спасибо, что помогли новичку. По какой-то причине я не очень рад, что эта дыра в безопасности работает. – Bjorn

+0

Нет проблем - просто убедитесь, что вы закрываете спину на работе! – heymega