Exemple #1
0
        private async Task <UserData> AuthenticateAsync_GetUser(Users.AuthVM value)
        {
            try
            {
                // HASH THE PASSWORD
                var cryptService = this.GetService <Helpers.Crypt>();
                var passwordHash = cryptService.Encrypt(value.Password);

                // LOCATE USER
                var user = await this.dbContext.Users
                           .Where(x =>
                                  x.RowStatus != (short)Base.enRowStatus.Removed &&
                                  x.UserName == value.UserName &&
                                  x.PasswordHash == passwordHash)
                           .FirstOrDefaultAsync();

                return(user);
            }
            catch (Exception) { throw; }
        }
Exemple #2
0
        public async Task <ActionResult <Users.TokenVM> > AuthenticateAsync([FromBody] Users.AuthVM value)
        {
            var service = this.GetService <UsersService>();

            return(await service.AuthenticateAsync(value));
        }
Exemple #3
0
        public async Task <ActionResult <Users.TokenVM> > AuthenticateAsync(Users.AuthVM value)
        {
            try
            {
                // LOCATE USER
                UserData user = null;
                if (value.GrantType == "password")
                {
                    user = await this.AuthenticateAsync_GetUser(value);

                    if (user == null)
                    {
                        return(this.InformationResponse("USERS_USER_NOT_FOUND_WARNING"));
                    }
                }
                else if (value.GrantType == "refresh_token")
                {
                    user = await this.AuthenticateAsync_GetUser(value.RefreshToken);

                    if (user == null)
                    {
                        return(this.InformationResponse("USERS_TOKEN_HAS_EXPIRED_WARNING"));
                    }
                }
                var result = new Users.TokenVM {
                    UserID = user.UserID
                };

                // CHECK ACTIVATION
                if (user.RowStatus == (short)Base.enRowStatus.Temporary)
                {
                    this.TrackEvent("User not yet Activated", $"userName:{user.UserName}");
                    await this.SendActivationMailAsync(user.UserID);

                    return(this.InformationResponse("USERS_USER_NOT_ACTIVATED_WARNING", "USERS_ACTIVATION_INSTRUCTIONS_WAS_SENT_MESSAGE"));
                }

                // GENERATE IDENTITY
                var roleList = await this.AuthenticateAsync_GetRoles(user.UserID, user.SelectedResourceID);

                var claimsList = new List <Claim> {
                    new Claim(ClaimTypes.NameIdentifier, user.UserID),
                    new Claim(ClaimTypes.Name, user.UserName),
                    new Claim(ClaimTypes.GivenName, user.Text),
                    new Claim(ClaimTypes.System, user.SelectedResourceID)
                };
                foreach (var role in roleList)
                {
                    claimsList.Add(new Claim(ClaimTypes.Role, role));
                }
                var claimsIdentity = new ClaimsIdentity(
                    new GenericIdentity(user.UserID, "Login"),
                    claimsList.ToArray()
                    );

                // CREATE TOKEN
                var tokenConfig   = this.GetService <Helpers.Token>();
                var securityToken = new SecurityTokenDescriptor
                {
                    Issuer             = tokenConfig.Configs.Issuer,
                    Audience           = tokenConfig.Configs.Audience,
                    SigningCredentials = tokenConfig.SigningCredentials,
                    Subject            = claimsIdentity,
                    NotBefore          = DateTime.UtcNow,
                    Expires            = DateTime.UtcNow.AddSeconds(tokenConfig.Configs.AccessExpirationInSeconds)
                };
                var tokenHandler = new JwtSecurityTokenHandler();
                var token        = tokenHandler.CreateToken(securityToken);
                result.AccessToken = tokenHandler.WriteToken(token);

                // REFRESH TOKEN
                result.RefreshToken = await this.AuthenticateAsync_GetRefreshToken(user.UserID, tokenConfig.Configs.RefreshExpirationInSeconds);

                return(this.OkResponse(result));
            }
            catch (Exception ex) { return(this.ExceptionResponse(ex)); }
        }