2015-01-23 12 views
14

Ich habe die Aufgabe der Änderung einer ASP.NET MVC-Anwendung in einer Weise, dass surfen zu myurl? Username = xxxxxx automatisch anmelden Benutzer xxxxxx gegeben, ohne nach Passwörtern zu fragen.ASP.NET MVC Identity-Login ohne Passwort

Ich habe bereits sehr deutlich gemacht, dass dies eine schreckliche Idee für viele sicherheitsrelevante Gründe und Szenarien ist, aber die Verantwortlichen sind bestimmt. Die Website wäre nicht öffentlich verfügbar.

Also: Gibt es eine Möglichkeit, sich ohne Passwort anzumelden, indem Sie beispielsweise den Microsoft.AspNet.Identity.UserManager erweitern und den AccountController ändern?

Einige Code:

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 hält eine Instanz eines Microsoft.AspNet.Identity.UserManager.

und 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 wäre.

+0

Zeigen Sie uns Ihre 'login' Code :) –

+1

... und natürlich kein Unternehmen jemals hat Probleme mit Insider-Bedrohungen * hust * * hust * Snowden. Was deine Frage angeht, ja, es ist einfach. Dinge immer weniger sicher zu machen ist es. Ich wäre versucht, jedes Passwort auf eine leere Zeichenfolge zu setzen und sie implizit zu verwenden (schnell 'n dreckig, aber es funktioniert und macht auch den Punkt, dass Ihre Sicherheit zur gleichen Zeit wertlos ist). Wenn Sie es "richtig" machen wollen, können Sie die Auth-Provider ableiten – Basic

+0

@AndyRefuerzo: Ich habe relevanten Code hinzugefügt. – Bjorn

Antwort

36

Sie müssen nur den usermanager verwenden, um den Benutzer anhand des Namens zu finden. Wenn Sie einen Datensatz haben, dann melden Sie sie einfach in.

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

Super Action-Namen! –

+0

Es hat tatsächlich funktioniert, ich dachte, das wäre mehr Ärger. Danke, dass du einem Anfänger geholfen hast. Aus irgendeinem Grund bin ich nicht glücklich, dieses Sicherheitsloch zu graben. – Bjorn

+0

Kein Problem - Stellen Sie sicher, dass Sie Ihren Rücken bei der Arbeit abdecken! – heymega

Verwandte Themen