private TokenResult GenerateAccessToken(TokenRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            IList <Claim> claims = new List <Claim>()
            {
                new Claim(UserDefaults.Claims.Name, request.UserName),
                new Claim(UserDefaults.Claims.NameIdentifier, request.UserId.ToString(), ClaimValueTypes.Integer64),
                new Claim(UserDefaults.Claims.Iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64),
                new Claim(UserDefaults.Claims.Email, request.Email),
                new Claim(UserDefaults.Claims.PhoneNumber, request.PhoneNumber),
                new Claim(UserDefaults.Claims.Id, request.UserId.ToString()),
                new Claim(UserDefaults.Claims.Aud, UserDefaults.TokenTypes.AccessToken)
            };


            var expiry = DateTime.Now.AddDays(2);

            TokenResult response = GenerateToken(claims, expiry);

            return(response);
        }
        private TokenResult GenerateToken(IList <Claim> claims, DateTime expiry)
        {
            var key       = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("hpsuhdkhd6868654364545675676"));
            var creds     = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            var notBefore = DateTime.Now;

            TokenResult result = new TokenResult();

            try
            {
                var securityToken = new JwtSecurityToken(
                    null,
                    null,
                    claims,
                    notBefore: notBefore,
                    expires: expiry,
                    signingCredentials: creds
                    );

                string token = _jwtSecurityTokenHandler.WriteToken(securityToken);

                result.Token    = token;
                result.ExpireIn = ((DateTimeOffset)expiry).ToUnixTimeSeconds();
            }
            catch
            {
                //TODO: Log
            }

            return(result);
        }
        public async Task <AuthenticationResult> AuthenticateUser(User user)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            var tokenRequest = new TokenRequest()
            {
                Email       = user.Email,
                UserName    = user.UserName,
                PhoneNumber = user.PhoneNumber,
                UserId      = user.Id,
            };
            TokenResult accessToken = GenerateAccessToken(tokenRequest);

            if (accessToken.Success && !await SetAccessTokenAsync(user, accessToken.Token))
            {
                accessToken.Token = null;
            }

            var result = new AuthenticationResult(accessToken);

            return(result);
        }
 public AuthenticationResult(TokenResult accessToken)
 {
     AccessToken = accessToken;
     Errors      = new List <string>();
 }