private dynamic CreateToken(LoginAPIModel model)
        {
            var claims = new List <Claim> //using System.Security.Claims;
            {
                new Claim(JwtRegisteredClaimNames.Sub, model.Id.ToString()),
                new Claim(ClaimTypes.Role, Enum.GetName(typeof(Roles), model.Role)),                                     // ROLES !!!
                new Claim(JwtRegisteredClaimNames.Nbf, new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds().ToString()), //using System.IdentityModel.Tokens.Jwt;
                new Claim(JwtRegisteredClaimNames.Exp, new DateTimeOffset(DateTime.Now.AddDays(1)).ToUnixTimeSeconds().ToString())
            };

            var token = new JwtSecurityToken(
                new JwtHeader(
                    new SigningCredentials(
                        new SymmetricSecurityKey(
                            Encoding.UTF8.GetBytes("NobodyWillGuessMeLOL")), SecurityAlgorithms.HmacSha256)),
                new JwtPayload(claims));
            var output = new
            {
                id    = model.Id,
                role  = Enum.GetName(typeof(Roles), model.Role),
                token = new JwtSecurityTokenHandler().WriteToken(token) // Core will return props in camelCase
            };

            return(output);
        }
Пример #2
0
        public async Task <IActionResult> Login(LoginAPIModel model)
        {
            if (ModelState.IsValid)
            {
                Models.User user = await _context.Users
                                   .Include(u => u.Role)
                                   .FirstOrDefaultAsync(u => u.Email == model.Email && u.Password == model.Password);

                if (user != null)
                {
                    await Authenticate(user); // аутентификация

                    var messageReg = CreateCustomStatus.CreateCustomStatusM("200", "Успех авторизации");
                    return(Ok(messageReg));
                }

                else
                {
                    ModelState.AddModelError("", "Неправильный логин и (или) пароль");
                    return(Ok(ModelState.Errors()));
                }
            }
            else
            {
                return(Ok(new { Errors = ModelState.Errors() }));
            }
        }
Пример #3
0
 public HttpResponseMessage Post([FromBody] LoginAPIModel user)
 {
     try
     {
         if (ModelState.IsValid)
         {
             UserAPIModel Luser = mapper.Map <UserAPIModel>(userBDC.AuthenticateUser(user.UserName, user.Password));
             if (Luser != null)
             {
                 return(Request.CreateResponse(HttpStatusCode.OK, Luser));
             }
             else
             {
                 return(Request.CreateResponse(HttpStatusCode.BadRequest, Resources.AlreadyRegisteredUser));
             }
         }
         else
         {
             return(Request.CreateResponse(HttpStatusCode.BadRequest, ModelState));
         }
     }
     catch (Exception)
     {
         return(Request.CreateResponse(HttpStatusCode.InternalServerError, false));
     }
 }
        public async Task <IActionResult> LoginAsync(LoginAPIModel model)
        {
            var user = await _userManager.FindByEmailAsync(model.Email);

            if (user is null)
            {
                return(BadRequest("Incorrect User Name or Password"));
            }
            if (!user.EmailConfirmed)
            {
                return(BadRequest("Please confirm your email"));
            }
            var result = await _signInManager.CheckPasswordSignInAsync(user, model.Password, false);

            if (!result.Succeeded)
            {
                return(BadRequest("Incorrect User Name or Password"));
            }
            var roles = await _userManager.GetRolesAsync(user);

            IList <Claim> claims = await _userManager.GetClaimsAsync(user);

            var token = _jwtToken.GenerateToken(user, roles, claims);

            return(Ok(new
            {
                result = result,
                username = user.Email,
                email = user.Email,
                firstName = user.FirstName.ToString(),
                lastName = user.LastName.ToString(),
                token = token,
                userid = user.Id
            }));
        }
        public string Login(LoginAPIModel model)
        {
            var response = webRequestHelper.Post("/api/account/login", JsonConvert.SerializeObject(model), "application/json; charset=UTF-8", "");

            if (response.HasError)
            {
                return("");
            }

            return(response.ContainsHeader("Authorization") ? response["Authorization"] : "");
        }
        public async Task <IActionResult> Register([FromBody] LoginAPIModel registerModel)
        {
            var user = new ApplicationUser {
                UserName = registerModel.UserID, Email = registerModel.UserID
            };
            var result = await _userManager.CreateAsync(user, registerModel.Password);

            if (result.Succeeded)
            {
                await _signInManager.SignInAsync(user, isPersistent : true);

                _logger.LogInformation(3, "User created a new account with password.");
                return(Ok());
            }

            // If we got this far, something failed.
            return(ResponseHelper.Unauthorized());
        }
        public async Task <IActionResult> Login([FromBody] LoginAPIModel loginModel)
        {
            Microsoft.AspNetCore.Identity.SignInResult result = await _signInManager.PasswordSignInAsync(
                loginModel.UserID, loginModel.Password, true, lockoutOnFailure : false);

            if (result.Succeeded)
            {
                _logger.LogInformation(1, "User logged in.");

                var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_settings.Value.SecretKey));
                var options    = new TokenProviderOptions
                {
                    Audience           = "MuscleFellowAudience",
                    Issuer             = "MuscleFellow",
                    SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                };
                TokenProvider tpm   = new TokenProvider(options);
                TokenEntity   token = await tpm.GenerateToken(HttpContext, loginModel.UserID, loginModel.Password);

                if (null != token)
                {
                    return(new JsonResult(token));
                }
                else
                {
                    return(NotFound());
                }
            }

            if (result.IsLockedOut)
            {
                _logger.LogWarning(2, "User account locked out.");
                return(Ok("Lockout"));
            }
            else
            {
                _logger.LogWarning(2, "Invalid login attempt.");
                return(Ok("Invalid login attempt."));
            }
        }
        public string TryLoginUser(LoginAPIModel model)
        {
            model.Password = Base64.Base64Decode(model.Password);

            User user = cateringDbContext.Users
                        .Include(x => x.Role)
                        .Where(x => x.Email == model.Email || x.Username == model.Email)
                        .Where(x => x.PasswordHash == Sha256Helper.GetHash(model.Password))
                        .FirstOrDefault();

            if (user == null)
            {
                return(null);
            }

            JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();

            byte[] key = Encoding.ASCII.GetBytes(appSettings.Secret);

            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, user.UserId.ToString()),
                new Claim(JwtRegisteredClaimNames.UniqueName, $"{user.FirstName} {user.LastName}"),
                new Claim(ClaimTypes.Role, user.Role.RoleTitle)
            };

            SigningCredentials signingCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature);

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims),
                SigningCredentials = signingCredentials
            };

            SecurityToken token = tokenHandler.CreateToken(tokenDescriptor);

            return(tokenHandler.WriteToken(token));
        }
        public IActionResult Login([FromBody] LoginAPIModel model)
        {
            string token = userService.TryLoginUser(model);  //Returns a valid JWT token if logged in successfuly, NULL if not

            if (token == null)
            {
                return(Unauthorized());
            }

            CookieOptions cookieOptions = new CookieOptions
            {
                IsEssential = true,
                Expires     = new DateTimeOffset(DateTime.Now.AddYears(1))
            };

            if (model.RememberMe == true)
            {
                cookieOptions.Expires = DateTime.Now.AddYears(10);
            }

            Response.Cookies.Append("token", token, cookieOptions);

            return(Ok());
        }