2015-08-08 19 views
7

Dopo aver letto le esercitazioni e aver provato, ho trovato che l'accesso con Identity è un modo complicato e inflessibile. Cambiare per usare il nome utente e rimuovere completamente l'email è stato un incubo (e non ci sono riuscito). Questa è stata la mia esperienza e non ho più alcuna forza per continuare ad andare in Owin Identity.ASP.Net MVC Alternative Accesso all'identità

Esistono alternative all'accesso OWIN/Identity accettabili dalla comunità ASP.Net valide come OWIN/Identity? Ho un progetto che richiede minimalismo (nome utente, password, nome completo SOLO). Spero che la mia domanda non è aperto si è conclusa ed è all'interno SO limiti;)

+0

Did u provare la classica maschera ASP .NET autenticazione? –

+1

prova questo https://github.com/brockallen/BrockAllen.MembershipReboot –

+3

Non è necessario utilizzare le funzionalità complete di Identity. L'identità è completamente personalizzabile guarda [un'altra mia risposta] (http://stackoverflow.com/questions/31584506/how-to-implement-custom-authentication-in-asp-net-mvc-5/31585768#31585768) per vedere come puoi. –

risposta

6

ecco una semplice implementazione di autenticazione Owin, nel caso in cui si vuole ancora fare un tentativo: (è il codice copiato da prodinner)

voi bisogno di una classe per configurarlo:

public static class OwinConfig 
{ 
    public static void ConfigureAuth(IAppBuilder app) 
    { 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/Account/SignIn") 
      }); 
    } 
} 

una classe di avvio in cui si esegue il ConfigureAuth

[assembly: OwinStartup(typeof(Startup))] 

namespace Omu.ProDinner.WebUI 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      OwinConfig.ConfigureAuth(app); 
     } 
    } 
} 

e il AccountController dove lo si utilizza:

public class AccountController : Controller 
{ 
    //... ctor, user service 

    private IAuthenticationManager Authentication 
    { 
     get 
     { 
      return HttpContext.GetOwinContext().Authentication; 
     } 
    } 

    private void SignInOwin(string name, bool rememberMe, IEnumerable<string> roles) 
    { 
     var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, name) }, 
      DefaultAuthenticationTypes.ApplicationCookie, 
       ClaimTypes.Name, ClaimTypes.Role); 

     foreach (var role in roles) 
     { 
      identity.AddClaim(new Claim(ClaimTypes.Role, role)); 
     } 


     Authentication.SignIn(new AuthenticationProperties 
     { 
      IsPersistent = rememberMe 
     }, identity); 
    } 

    public ActionResult SignIn() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult SignIn(SignInInput input) 
    { 
     if (!ModelState.IsValid) 
     { 
      input.Password = null; 
      input.Login = null; 
      return View(input); 
     } 

     var user = userService.Get(input.Login, input.Password); 

     if (user == null) 
     { 
      ModelState.AddModelError("", "incorrect username or password"); 
      return View(); 
     } 

     SignInOwin(user.Login, input.Remember, user.Roles.Select(o => o.Name)); 


     return RedirectToAction("index", "home"); 
    } 

    public ActionResult SignOff() 
    { 
     Authentication.SignOut(); 
     return RedirectToAction("SignIn", "Account"); 
    } 
} 

Ed ecco la lista dei pacchetti che è necessario:

<package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net45" /> 
    <package id="Microsoft.Owin" version="3.0.1" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security" version="3.0.1" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security.Cookies" version="3.0.1" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security.OAuth" version="3.0.1" targetFramework="net45" /> 
    <package id="Owin" version="1.0" targetFramework="net45" /> 
Problemi correlati