Esempio n. 1
0
        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());
                }
            }
        }
Esempio n. 2
0
        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());
        }