public IActionResult LogIn(Models.LoginModel user) { if (user == null) { throw new Exceptions.GeneralException("Модель аутентификации отсутствует"); } using (BookDb.BookDbContext db = new BookDb.BookDbContext()) { BookDb.User dbUser = db.User.FirstOrDefault(x => x.Login == user.UserName && x.Password == user.Password); if (dbUser == null) { throw new Exceptions.AuthorizationException("Указаны неверный логин или пароль"); } else { //аутентификация прошла успешно //составляем, некоторый список параметров аутентифицированного пользователя var claims = new List <Claim> { new Claim(ClaimsIdentity.DefaultNameClaimType, dbUser.Login), new Claim("id", dbUser.Id.ToString()) }; //генерим токен var secretKey = AuthOptions.SecretKey; var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256); var tokeOptions = new JwtSecurityToken( issuer: AuthOptions.ISSUER, audience: AuthOptions.AUDIENCE, claims: claims, notBefore: DateTime.Now, expires: DateTime.Now.AddMinutes(AuthOptions.LIFETIME), signingCredentials: signinCredentials ); var tokenString = new JwtSecurityTokenHandler().WriteToken(tokeOptions); //добавляем токен в куки, он не видим клиентом HttpContext.Response.Cookies.Append(AuthOptions.TOKENCOOKIE, tokenString, new CookieOptions { HttpOnly = true, MaxAge = TimeSpan.FromMinutes(AuthOptions.LIFETIME) }); //добавляем флаг прохождения аутентификации, с которым клиент сверяется HttpContext.Response.Cookies.Append(AuthOptions.TESTCOOKIE, "true", new CookieOptions { HttpOnly = false, MaxAge = TimeSpan.FromMinutes(AuthOptions.LIFETIME) }); return(Ok()); } } }
public IActionResult Registry(Models.RegistryModel model) { using (BookDb.BookDbContext db = new BookDb.BookDbContext()) { if (db.User.Any(x => x.Login == model.UserName)) { throw new Exceptions.GeneralException("Пользователь с указанным логином уже имеется"); } using (IDbContextTransaction trans = db.Database.BeginTransaction()) { var user = new BookDb.User(); user.Login = model.UserName; user.Password = model.Password; db.User.Add(user); db.SaveChanges(); trans.Commit(); } } return(Ok()); }