private AccountResponse AccountFromMobileServiceUser(MobileServiceUser user)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            IDictionary <string, string> claims = JwtUtility.GetClaims(user.MobileServiceAuthenticationToken);

            var account = new AccountResponse();

            account.Success = true;
            account.User    = new User
            {
                //Id = Guid.Parse(user.UserId),
                Id        = Guid.Parse(claims[JwtClaimNames.Subject]),
                FirstName = claims[JwtClaimNames.GivenName],
                LastName  = claims[JwtClaimNames.FamilyName],
                Email     = claims[JwtClaimNames.Email],
                Role      = claims[JwtClaimNames.Role],
            };
            account.Token = user.MobileServiceAuthenticationToken;

            return(account);
        }
Example #2
0
        private static void Main(string[] args)
        {
            JwtHeader    head    = new JwtHeader();
            TokenPayload payload = new TokenPayload()
            {
                Username            = "******",
                IssuedAt            = 1422979638,
                BusinessUserID      = 1,
                BusinessID          = 2,
                AssignedBusinessIDs = new List <int>()
                {
                    3, 4, 6
                }
            };
            JwtUtility <JwtHeader, TokenPayload> jwtUtil = new JwtUtility <JwtHeader, TokenPayload>(head, payload);
            string token = jwtUtil.ToString();

            Log4netLogger.Info(MethodBase.GetCurrentMethod().DeclaringType, token);

            Console.WriteLine();

            Log4netLogger.Warn(MethodBase.GetCurrentMethod().DeclaringType, Validate(token));

            Console.ReadLine();
        }
Example #3
0
        public IActionResult Login([FromBody] LoginViewModel value)
        {
            try
            {
                User user = userRepository.Get(value.username).Copy();

                if (Utilities.Pbkdf2Utility.ValidatePassword(value.password, user.Password))
                {
                    user.Password = string.Empty;

                    string jwt = JwtUtility.GenerateJwt(user);

                    LoggedInViewModel loggedInViewModel = new LoggedInViewModel()
                    {
                        JWT  = jwt,
                        User = user
                    };

                    return(Ok(loggedInViewModel));
                }
            }
            catch {  }

            return(BadRequest("Invalid Username or Password"));
        }
        public async Task <IActionResult> Login([FromBody] LoginDto loginDto)
        {
            var user = await _userService.Login(loginDto.Username, loginDto.Password);

            var sessionDto = _mapper.Map <SessionDto>(user);
            var idToken    = JwtUtility.CreateJwtToken(AppSettings, sessionDto);

            Request.HttpContext.Response.Headers.Add(Constants.AccessToken, idToken);
            return(Ok(user));
        }
Example #5
0
        public void TestJwtEncode()
        {
            var name = "mauricio";

            var dt1 = DateTime.Now;
            var dt2 = DateTime.Now.AddMinutes(30);

            var hash = JwtUtility.Encode(Guid.NewGuid(), UnixDateUtility.ConvertToUnixTimestamp(dt2), UnixDateUtility.ConvertToUnixTimestamp(dt1));

            var decode = JwtUtility.Decode(hash);
        }
Example #6
0
 protected Guid GetUserIdByToken(string token)
 {
     try{
         var  jsonToken = JwtUtility.Decode(token);
         var  tokenInfo = JsonUtility.Deserialize <Dictionary <string, object> >(jsonToken);
         Guid userId;
         Guid.TryParse(tokenInfo["userId"].ToString(), out userId);
         return(userId);
     }catch {
         throw new SessionExpiredException(invalidSessionError);
     }
 }
        public async Task JwtUtility_GenerateJwt_FncConnectGenerateJwtBehavior()
        {
            //Arrange
            var fncConnectGenerateJwtBehavior = new FncConnectGenerateJwtBehavior(new HttpUtility(), TestHelper.GetConfigurationSettings());
            var jwtUtility = new JwtUtility(null, fncConnectGenerateJwtBehavior);

            //Act
            var generateJwtResult = await jwtUtility.GenerateJwtAsync().ConfigureAwait(false);

            //Assert
            Assert.AreEqual(Status.Success, generateJwtResult.Status);
            Assert.IsTrue(!string.IsNullOrEmpty(generateJwtResult.Result.Jwt));
        }
        public async Task <IActionResult> Register([FromBody] RegisterDto registerDto)
        {
            _userService.Validate(registerDto);
            await _userService.Register(registerDto);

            var user       = _mapper.Map <UserDto>(registerDto);
            var sessionDto = _mapper.Map <SessionDto>(user);
            var idToken    = JwtUtility.CreateJwtToken(AppSettings, sessionDto);

            Request.HttpContext.Response.Headers.Add(Constants.AccessToken, idToken);

            return(Ok(user));
        }
        public static string GetUsername(this HttpContextBase httpContext)
        {
            string username = null;
            JwtUtility <JwtHeader, PayloadIdentity> jwtUtil = new JwtUtility <JwtHeader, PayloadIdentity>(new JwtHeader(), new PayloadIdentity());
            string token = httpContext.GetAuthToken();

            if (token != null)
            {
                PayloadIdentity payloadIdentity = jwtUtil.GetPayload(token);
                username = payloadIdentity.Username;
            }
            return(username);
        }
Example #10
0
        public void TestWrongUser()
        {
            User user = new User()
            {
                Id       = 837,
                Username = "******",
                Password = "******"
            };

            string jwt = JwtUtility.GenerateJwt(user);

            int?userId = JwtUtility.ReadJwt(jwt);

            Assert.AreNotEqual(400, userId);
        }
        public async Task JwtUtility_HealthCheck_FncConnectBehaviors()
        {
            //Arrange
            var fncConnectGenerateJwtBehavior = new FncConnectGenerateJwtBehavior(new HttpUtility(), TestHelper.GetConfigurationSettings());
            var fncConnectValidateJwtBehavior = new FncConnectValidateJwtBehavior(new HttpUtility(), TestHelper.GetConfigurationSettings());
            var jwtUtility = new JwtUtility(fncConnectValidateJwtBehavior, fncConnectGenerateJwtBehavior);
            var healthcheckNotifierUtility = new Mock <IHealthCheckNotifierUtility>();

            //Act
            var healthCheckUtility = new HealthCheckUtility(new List <IHealthCheckable>()
            {
                jwtUtility
            }, healthcheckNotifierUtility.Object, TestHelper.GetConfigurationSettings());

            //Assert
            Assert.AreEqual(HealthStatus.Active, (await healthCheckUtility.GetHealthCheckResultAsync().ConfigureAwait(false)).Status);
        }
Example #12
0
        public async Task JwtUtlity_GenerateJwt_ReturnsGenerateJwtBehaviorResult()
        {
            //Arrange
            var generateJwtBehaviorResult = new GenerateJwtResult("jwt");

            var jwtGenerateBehaviorMock = new Mock <IGenerateJwtBehavior>();

            jwtGenerateBehaviorMock.Setup(x => x.GenerateJwtAsync(It.IsAny <int>(), It.IsAny <IEnumerable <KeyValuePair <string, string> > >()))
            .Returns(Task.FromResult(HttpFragileOperationResult <GenerateJwtResult> .CreateSuccessfulResult(generateJwtBehaviorResult, HttpStatusCode.OK, "")));

            var jwtUtility = new JwtUtility(null, jwtGenerateBehaviorMock.Object);

            //Act
            var result = await jwtUtility.GenerateJwtAsync().ConfigureAwait(false);

            //Assert
            Assert.AreEqual(generateJwtBehaviorResult.Jwt, result.Result.Jwt);
        }
Example #13
0
        public async Task JwtUtlity_GenerateJwt_ReturnsValidateJwtBehaviorResult()
        {
            //Arrange
            var validateJwtBehaviorResult = new ValidateJwtResult(true, "123");
            var jwtValidateBehavior       = new Mock <IValidateJwtBehavior>();

            jwtValidateBehavior.Setup(x => x.ValidateJwtAsync(It.IsAny <string>())).Returns(Task.FromResult(HttpFragileOperationResult <ValidateJwtResult> .CreateSuccessfulResult(validateJwtBehaviorResult, HttpStatusCode.OK, "")));

            var jwtUtility = new JwtUtility(jwtValidateBehavior.Object, null);

            //Act
            var result = await jwtUtility.ValidateJwtAsync("AnyJwt").ConfigureAwait(false);

            //Assert
            Assert.AreEqual(validateJwtBehaviorResult.ClientId, "123");
            Assert.IsTrue(validateJwtBehaviorResult.IsValid);
            Assert.AreEqual(0, result.ErrorMessages.Count());
        }
        public async Task FileUtility_FileVaultGetPublicUrlAsync_ReturnsErrorResult_WhenJwtGenerationErrors()
        {
            //Arrange
            var jwtValidateBehavior     = new Mock <IValidateJwtBehavior>();
            var jwtGenerateBehaviorMock = new Mock <IGenerateJwtBehavior>();

            jwtGenerateBehaviorMock.Setup(x => x.GenerateJwtAsync(It.IsAny <int>(), It.IsAny <IEnumerable <KeyValuePair <string, string> > >())).Returns(Task.FromResult(HttpFragileOperationResult <GenerateJwtResult> .CreateErrorResult(HttpStatusCode.InternalServerError, "", "ErrorMessage")));

            var jwtUtility = new JwtUtility(jwtValidateBehavior.Object, jwtGenerateBehaviorMock.Object);

            var fileUtility = new FileUtility(new Mock <IGetFileBehavior>().Object, new Mock <IStoreFileBehavior>().Object, new FileVaultGetPublicUrlBehavior(jwtUtility, TestHelper.GetConfigurationSettings()));

            //Act
            var result = await fileUtility.GetPublicUrlAsync(Guid.NewGuid().ToString()).ConfigureAwait(false);

            //Assert
            Assert.AreEqual(Status.Error, result.Status);
        }
        Invoke(Microsoft.AspNetCore.Http.HttpContext context, Application.Services.IUserService userService)
        {
            var requestHeaders =
                context.Request.Headers["Authorization"];

            var token =
                requestHeaders
                .FirstOrDefault()
                ?.Split(" ")
                .Last();

            if (token != null)
            {
                JwtUtility.AttachUserToContext(context: context,
                                               userService: userService, token: token, secretKey: MainSettings.SecretKey);
            }

            await Next(context);
        }
Example #16
0
        private bool AuthenticateCaptchaToken(string token, string secret)
        {
            try
            {
                var    payload = JwtUtility.TryDecode(token, secret, _logger);
                string nonce   = payload.SelectToken("data.nonce")?.Value <string>();
                if (nonce == CaptchaNonce)
                {
                    return(true);
                }

                _logger.LogWarning("Could not match expected captcha {Nonce} in {Payload}", CaptchaNonce, payload.ToString());
                return(false);
            }
            catch
            {
                return(false);
            }
        }
Example #17
0
        public IHttpActionResult Login([FromBody] Login login)
        {
            var existingUser = userService.GetUserByUsername(login.Username);

            if (existingUser == null)
            {
                return(Unauthorized());
            }
            var isAuthenticated = Crypto.VerifyHashedPassword(existingUser.PasswordHash, login.Password);

            if (!isAuthenticated)
            {
                return(Unauthorized());
            }
            var token = JwtUtility.CreateToken(existingUser);
            var user  = AuthMapper.LoginMap(existingUser, token);

            return(Ok(user));
        }
Example #18
0
        public static void SetAuthorizationCookie(this HttpContextBase httpContext, string username)
        {
            string          key      = Settings.InitSetting.Instance.AuthCookieName;
            DateTime        utcNow   = DateTime.UtcNow;
            PayloadIdentity identity = new PayloadIdentity()
            {
                IssuedAt = DateGenerator.ToUnixTimeStamp(utcNow),
                ExpireAt = DateGenerator.ToUnixTimeStamp(utcNow) + Settings.InitSetting.Instance.AuthorizationTokenLifeSpanInSecond,
                Username = username
            };
            JwtUtility <JwtHeader, PayloadIdentity> jwtUtil = new JwtUtility <JwtHeader, PayloadIdentity>(new JwtHeader(), identity);
            string     token  = jwtUtil.ToString();
            HttpCookie cookie = new HttpCookie(key);

            cookie.HttpOnly = false;
            cookie.Value    = token;
            cookie.Expires  = DateTime.Now.AddSeconds(Settings.InitSetting.Instance.AuthorizationTokenLifeSpanInSecond);
            httpContext.Response.Cookies.Add(cookie);
            AddTokenIssued(username, token, DateGenerator.ZeroUnixTimestamp.AddSeconds(identity.IssuedAt), DateGenerator.ZeroUnixTimestamp.AddSeconds(identity.ExpireAt));
        }
Example #19
0
        public async Task JwtUtlityHealthCheck_GetHealth_ReturnsWarningHealthCheckResult_WhenGenerateBehaviorResultsInError()
        {
            //Arrange
            var validateJwtBehaviorResult = new ValidateJwtResult(true, "123");
            var jwtValidateBehavior       = new Mock <IValidateJwtBehavior>();

            jwtValidateBehavior.Setup(x => x.ValidateJwtAsync(It.IsAny <string>())).Returns(Task.FromResult(HttpFragileOperationResult <ValidateJwtResult> .CreateSuccessfulResult(validateJwtBehaviorResult, HttpStatusCode.OK, "")));

            var jwtGenerateBehaviorMock = new Mock <IGenerateJwtBehavior>();

            jwtGenerateBehaviorMock.Setup(x => x.GenerateJwtAsync(It.IsAny <int>(), It.IsAny <IEnumerable <KeyValuePair <string, string> > >())).Returns(Task.FromResult(HttpFragileOperationResult <GenerateJwtResult> .CreateErrorResult(HttpStatusCode.InternalServerError, "", "TestMessage")));

            var jwtUtility = new JwtUtility(jwtValidateBehavior.Object, jwtGenerateBehaviorMock.Object);

            //Act
            var result = await jwtUtility.GetHealthAsync().ConfigureAwait(false);

            //Assert
            Assert.AreEqual(HealthStatus.Warning, result.Status);
        }
Example #20
0
        public async Task JwtUtlityHealthCheck_GetHealth_ReturnsCriticalHealthCheckResult_WhenValidateBehaviorResultIsFailed()
        {
            //Arrange
            var jwtValidateBehavior = new Mock <IValidateJwtBehavior>();

            jwtValidateBehavior.Setup(x => x.ValidateJwtAsync(It.IsAny <string>())).Returns(Task.FromResult(HttpFragileOperationResult <ValidateJwtResult> .CreateFailedResult(HttpStatusCode.BadRequest, "", "TestMessage")));

            var generateJwtBehaviorResult = new GenerateJwtResult("jwt");
            var jwtGenerateBehaviorMock   = new Mock <IGenerateJwtBehavior>();

            jwtGenerateBehaviorMock.Setup(x => x.GenerateJwtAsync(It.IsAny <int>(), It.IsAny <IEnumerable <KeyValuePair <string, string> > >())).Returns(Task.FromResult(HttpFragileOperationResult <GenerateJwtResult> .CreateSuccessfulResult(generateJwtBehaviorResult, HttpStatusCode.OK, "")));

            var jwtUtility = new JwtUtility(jwtValidateBehavior.Object, jwtGenerateBehaviorMock.Object);

            //Act
            var result = await jwtUtility.GetHealthAsync().ConfigureAwait(false);

            //Assert
            Assert.AreEqual(HealthStatus.Critical, result.Status);
        }
Example #21
0
        private AccountResponse AccountFromMobileServiceUser(MobileServiceUser user, string email = null)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            IDictionary <string, string> claims = JwtUtility.GetClaims(user.MobileServiceAuthenticationToken);

            if (!claims.ContainsKey(JwtClaimNames.Subject) && !string.IsNullOrWhiteSpace(email))
            {
                claims.Add(JwtClaimNames.Subject, email);
            }

            var account = new AccountResponse();

            account.Success = true;
            account.User    = new User(claims);

            return(account);
        }
Example #22
0
        public static bool IsAuthorized(string token, bool extendToken)
        {
            JwtUtility <JwtHeader, PayloadIdentity> jwtUtil = new JwtUtility <JwtHeader, PayloadIdentity>(new JwtHeader(), new PayloadIdentity());
            PayloadIdentity payloadIdentity = null;

            try
            {
                if (token != null)
                {
                    payloadIdentity = jwtUtil.GetPayload(token);
                }
            }
            catch (Exception) { }
            bool isAuthorized = (token != null && jwtUtil.IsValid(token) && payloadIdentity != null && !payloadIdentity.isTokenExpired());

            if (isAuthorized && extendToken)
            {
                ExtendTokenIssued(payloadIdentity.Username, token);
            }
            return(isAuthorized);
        }
        public async Task <IActionResult> Login([FromBody] AuthenticationModel authenticationModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(authenticationModel));
            }
            var login = await _userRepository.LoginAsync(authenticationModel);

            if (login == null)
            {
                return((IActionResult) new NotAcceptableObjectResult(new JsonResult(Usernotfound)));
            }
            else
            {
                var httpConnectionFeature = HttpContext.Features.Get <IHttpConnectionFeature>();
                var localIpAddress        = httpConnectionFeature?.LocalIpAddress;
                if (localIpAddress != null)
                {
                    var jwtSettings = new JwtSettings
                    {
                        Issuer         = localIpAddress.ToString(),
                        Audience       = localIpAddress.ToString(),
                        ExpirationTime = 30,
                        JwtId          = new Guid().ToString(),
                        NotBefore      = new DateTime(),
                        Tenant         = login.TenantGuid.ToString()
                    };

                    return(new OkObjectResult(
                               new JwtSecurityTokenHandler().WriteToken(JwtUtility.BuildToken(login, _config["Jwt:Key"],
                                                                                              jwtSettings))));
                }
                else
                {
                    return(BadRequest());
                }
            }
        }
Example #24
0
        public async Task JwtUtlityHealthCheck_GetHealth_ReturnsActiveHealthCheckResult_WhenAllGood()
        {
            //Arrange
            var validateJwtBehaviorResult = new ValidateJwtResult(true, "123");
            var jwtValidateBehavior       = new Mock <IValidateJwtBehavior>();

            jwtValidateBehavior.Setup(x => x.ValidateJwtAsync(It.IsAny <string>())).Returns(Task.FromResult(HttpFragileOperationResult <ValidateJwtResult> .CreateSuccessfulResult(validateJwtBehaviorResult, HttpStatusCode.OK, "")));

            var generateJwtBehaviorResult = new GenerateJwtResult("jwt");
            var jwtGenerateBehaviorMock   = new Mock <IGenerateJwtBehavior>();

            jwtGenerateBehaviorMock.Setup(x => x.GenerateJwtAsync(It.IsAny <int>(), It.IsAny <IEnumerable <KeyValuePair <string, string> > >())).Returns(Task.FromResult(HttpFragileOperationResult <GenerateJwtResult> .CreateSuccessfulResult(generateJwtBehaviorResult, HttpStatusCode.OK, "")));

            var jwtUtility = new JwtUtility(jwtValidateBehavior.Object, jwtGenerateBehaviorMock.Object);

            //Act
            var result = await jwtUtility.GetHealthAsync().ConfigureAwait(false);

            //Assert
            Assert.AreEqual(HealthStatus.Active, result.Status);
            Assert.AreEqual("JWT Generate/Validate", result.Description);
            Assert.AreEqual(2, result.Vitals.Count);
        }
Example #25
0
        protected void GenerateUserToken()
        {
            var token = JwtUtility.Encode(user.Id, UnixDateUtility.ConvertToUnixTimestamp(user.GetExpiration()), UnixDateUtility.ConvertToUnixTimestamp(user.LastLogon));

            user.SetToken(token);
        }