ASP.Net MVC替代登录身份

本文关键字:登录 身份 Net MVC ASP | 更新日期: 2023-09-27 18:06:55

在阅读教程和试用后,我发现登录身份是复杂的,不灵活的方式。改变使用用户名和完全删除电子邮件是一个噩梦(我没有成功)。这就是我的经历,我没有力量继续走自己的身份之路了。

是否有OWIN/Identity登录的替代方案是ASP可以接受的?网络社区就像OWIN/身份一样有效?我有一个项目,需要简约(用户名,密码,全名ONLY)。我希望我的问题不是开放式的,在SO范围内;)

ASP.Net MVC替代登录身份

这里有一个简单的自己的验证实现,如果你仍然想尝试一下:(它的代码复制自prodinner)

你需要一个类来配置它:

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

执行ConfigureAuth的启动类

[assembly: OwinStartup(typeof(Startup))]
namespace Omu.ProDinner.WebUI
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            OwinConfig.ConfigureAuth(app);
        }
    }
}

和使用它的AccountController:

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");
    }
}

,这是你需要的包的列表:

  <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" />