public async Task Invoke(HttpContext context, IUserManagerAuthentication authenticationManager, ITokenValidator tokenValidator)
        {
            var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();

            if (!string.IsNullOrWhiteSpace(token))
            {
                await tokenValidator.ValidateAndExtract(context, authenticationManager, token);
            }
            await _next(context);
        }
Ejemplo n.º 2
0
        public async Task <bool> ValidateAndExtract(HttpContext context, IUserManagerAuthentication userManagerAuthenticationManager, string token)
        {
            try
            {
                _logger.LogDebug("TokenValidator, ValidateAndExtract, Parameters token:{token}", token);
                var claims = GetClaims(token);

                if (!claims.Any())
                {
                    return(false);
                }

                var user = new TokenUser
                {
                    Id   = int.Parse(claims.First(x => x.Type == "id").Value),
                    Type = Enum.Parse <UserType>(claims.First(x => x.Type == "type").Value)
                };

                _logger.LogDebug("TokenValidator, ValidateAndExtract, User Id :{user}", user.Id);

                var userContext = await userManagerAuthenticationManager.Get(user.Id, user.Type);

                if (userContext == null)
                {
                    _logger.LogDebug("User not exsits in the databas, user id: {id}", user.Id);
                    return(false);
                }

                context.Items["User"] = new TokenUser
                {
                    Id         = userContext.UserId,
                    Identifier = userContext.Identifier,
                    Type       = userContext.Type,
                };
                return(true);
            }
            catch (Exception exception)
            {
                _logger.LogError(exception, exception.Message);
                return(false);
            }
        }
 public AccountController(IUserManagerAuthentication userManagerAuthentication, IJwtMangerAuthentication jwtMangerAuthentication)
 {
     _userManagerAuthentication = userManagerAuthentication;
     _jwtMangerAuthentication   = jwtMangerAuthentication;
 }