コード例 #1
0
        public async Task <IActionResult> Refresh([FromBody] TokenRefreshRequest request)
        {
            var authResponse = await _identityRepository.RefreshTokenAsync(request.Token, request.RefreshToken);

            if (!authResponse.Success)
            {
                return(BadRequest(new AuthFailResponse
                {
                    Errors = authResponse.Errors
                }));
            }

            return(Ok(new AuthSuccessResponse
            {
                Token = authResponse.Token,
                RefreshToken = authResponse.RefreshToken
            }));
        }
コード例 #2
0
        public async Task <string> RefreshTokenAsync(string token)
        {
            var tokenRefreshRequest = new TokenRefreshRequest
            {
                OriginalJWT = token
            };

            using (var response = await _client.PostAsync(_authOptions.ApiAuthTokenRefreshUrl, tokenRefreshRequest, _jsonSettings))
            {
                if (!response.IsSuccessStatusCode)
                {
                    _logger.LogInformation($"Token refresh failed. Response status code: {response.StatusCode}");
                    return(null);
                }
                var tokenRefreshResponse = await response.Content.ReadAsAsync <TokenRefreshResponse>();

                return(tokenRefreshResponse.Jwt);
            }
        }
コード例 #3
0
        protected async Task <string> GetAccessToken()
        {
            if (userRepository != null)
            {
                if (userRepository.LastLogin.AddSeconds(userRepository.TokenTime) > DateTime.Now.AddSeconds(120))
                {
                    return(userRepository.AccessToken);
                }
                else
                {
                    TokenRefreshRequest tokenRefreshRequest = new TokenRefreshRequest
                    {
                        refreshToken = userRepository.RefreshToken,
                    };
                    var res = await _xlinkApi.postUserTokenRefresh(tokenRefreshRequest, userRepository.AccessToken);

                    userRepository.AccessToken  = res.accessToken;
                    userRepository.TokenTime    = int.Parse(res.expireIn);
                    userRepository.LastLogin    = DateTime.Now;
                    userRepository.RefreshToken = res.refreshToken;

                    return(userRepository.AccessToken);
                }
            }
            else
            {
                UserAuthRequest userAuthRequest = new UserAuthRequest
                {
                };
                var res = await _xlinkApi.postUserAuth(userAuthRequest);

                userRepository = new UserRepository
                {
                    AccessToken  = res.accessToken,
                    TokenTime    = res.expireIn,
                    LastLogin    = DateTime.Now,
                    RefreshToken = res.refreshToken,
                };

                return(userRepository.AccessToken);
            }
        }
コード例 #4
0
        public async Task <IActionResult> TokenRefresh([FromBody] TokenRefreshRequest request)
        {
            var client = _httpClientFactory.CreateClient(HttpClients.ApiGW);

            var jsonRequest   = JsonConvert.SerializeObject(request);
            var stringContent = new StringContent(jsonRequest, UnicodeEncoding.UTF8, "application/json");

            var response = await client.PutAsync(API.Auth.PutRefreshToken(_settings.LoginApiUrl, VERSION_API), stringContent);

            if (response.StatusCode == HttpStatusCode.BadRequest)
            {
                return(BadRequest());
            }

            var result = await response.Content.ReadAsStringAsync();

            var authResponse = JsonConvert.DeserializeObject <AuthResponse>(result);

            return(Ok(authResponse));
        }
コード例 #5
0
        /*
         * Eğer access token a sahip bir user refresh isteğinde bulunursa refresh edilip yeni token ile islemine devam edebilecek
         * user ın token ı var ama expired olmussa ozaman hata dondurecek
         */

        public async Task <UserInfo> RefreshToken(TokenRefreshRequest refreshRequest)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var readedToken  = tokenHandler.ReadJwtToken(refreshRequest.Token);

            if (refreshRequest.ExpireTime < DateTime.Now)
            {
                throw new ArgumentNullException("Token is no longer available ");
            }

            var user = await _dbContext.Users.SingleOrDefaultAsync(user => user.LoginName == refreshRequest.LoginUser &&
                                                                   user.Password == refreshRequest.LoginPassword);

            if (user == null)
            {
                return(null);
            }
            var secretKey  = _configuration.GetValue <string>("JwtTokenKey");
            var claims     = readedToken.Claims;
            var singingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));
            var refreshTokenDescription = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims),
                NotBefore          = DateTime.Now,
                Expires            = DateTime.Now.AddMinutes(1),
                SigningCredentials = new SigningCredentials(singingKey, SecurityAlgorithms.HmacSha256Signature),
            };

            var refreshToken = tokenHandler.CreateToken(refreshTokenDescription);
            var userInfo     = _mapper.Map <UserInfo>(user);

            userInfo.ExpireTime = refreshTokenDescription.Expires ?? DateTime.Now.AddHours(1);
            userInfo.Token      = tokenHandler.WriteToken(refreshToken);

            return(userInfo);
        }
コード例 #6
0
        public IActionResult RefreshToken([FromBody] TokenRefreshRequest tokenRefreshRequest)
        {
            Logger.Debug("Request: {0}", Framework.Common.SerializeJson.ToObject(tokenRefreshRequest));
            DateTime dateRequest   = DateTime.Now;
            var      response      = new IResponse <TokenRefreshResponse>();
            string   correlationId = string.Empty;

            try
            {
                #region Authorization Usuario y Contraseña
                if (string.IsNullOrEmpty(Request.Headers["Authorization"]))
                {
                    var validate = Models.Response.Error(null, "NotAuthenticated");
                    response.Data    = null;
                    response.Message = validate.Message;
                    response.State   = validate.State;
                    return(Unauthorized(response));
                }

                AuthenticationHeaderValue authHeader = AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]);
                var credentials = Encoding.UTF8.GetString(Convert.FromBase64String(authHeader.Parameter)).Split(':');
                correlationId = Request.Headers["Correlation-Id"].ToString();

                Core.Entity.User user = new Core.Entity.User()
                {
                    Public   = tokenRefreshRequest.PublicToken,
                    UserName = credentials[0],
                    Password = credentials[1]
                };
                var userAuthenticate = _user.Authenticate(user);
                if (userAuthenticate.Data == null)
                {
                    var validate = Models.Response.Error("NotAuthenticated");
                    response.Data    = null;
                    response.Message = validate.Message;
                    response.State   = validate.State;
                    return(Unauthorized(response));
                }
                Core.Entity.UserPolicy userPolicy = new Core.Entity.UserPolicy()
                {
                    AppUserId = tokenRefreshRequest.AppUserId,
                    IdUser    = ((Core.Entity.User)userAuthenticate.Data).Id
                };
                Core.Entity.Policy policy = new Core.Entity.Policy()
                {
                    Name = Request.Path.Value
                };
                var userPolicyAuthorize = _userPolicy.Authorize(userPolicy, policy);
                if (userPolicyAuthorize.Data == null)
                {
                    var validate = Models.Response.Error("NotUnauthorized");
                    response.Data    = null;
                    response.Message = validate.Message;
                    response.State   = validate.State;
                    return(Unauthorized(response));
                }
                #endregion

                var    refreshToken = Request.Cookies["refreshToken"];
                string ipAddress    = "";
                if (Request.Headers.ContainsKey("X-Forwarded-For"))
                {
                    ipAddress = Request.Headers["X-Forwarded-For"];
                }
                else
                {
                    ipAddress = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
                }
                var newRefreshToken = _tokenManager.GenerateRefreshToken(ipAddress, _configuration.GetValue <double>("JwtSettings:TimeExpirationTokenRefresh"));

                var refreshTokenUpdate = _refreshToken.RefreshTokenUpdate(tokenRefreshRequest.Email, ipAddress, refreshToken, newRefreshToken.Token);
                if (refreshTokenUpdate.Data == null)
                {
                    response.Data    = null;
                    response.State   = refreshTokenUpdate.State;
                    response.Message = refreshTokenUpdate.Message;

                    return(BadRequest(response));
                }
                var clientData = (Core.Entity.Client)refreshTokenUpdate.Data;


                newRefreshToken.CreationUser = tokenRefreshRequest.AppUserId;
                newRefreshToken.EmailClient  = tokenRefreshRequest.Email;

                var refreshTokenInsertClient = _refreshToken.Insert(newRefreshToken);

                if (refreshTokenInsertClient.Data == null)
                {
                    response.Data    = null;
                    response.State   = refreshTokenInsertClient.State;
                    response.Message = refreshTokenInsertClient.Message;

                    return(BadRequest(response));
                }
                var refreshTokenRemove = _refreshToken.RemoveOldRefreshTokens(tokenRefreshRequest.Email, _configuration.GetValue <int>("JwtSettings:RefreshTokenTTL"));

                var claims = new List <Claim>
                {
                    new Claim(JwtRegisteredClaimNames.Iat, Guid.NewGuid().ToString()),
                    new Claim(ClaimTypes.Name, clientData.NameComplete),
                    new Claim(ClaimTypes.Email, clientData.Email),
                };
                var accessToken = _tokenManager.GenerateAccessToken(claims);

                var cookieOptions = new CookieOptions
                {
                    //HttpOnly = true,
                    Expires  = DateTime.UtcNow.AddDays(_configuration.GetValue <double>("JwtSettings:TimeExpirationTokenRefresh")),
                    SameSite = SameSiteMode.None,
                    Secure   = true,
                };
                Response.Cookies.Append("refreshToken", newRefreshToken.Token, cookieOptions);

                response.Data = new TokenRefreshResponse
                {
                    Email              = clientData.Email,
                    Role               = clientData.Role == Core.Entity.Role.Admin ? "Admin" : "User",
                    Verify             = clientData.IsVerified,
                    RegistredCompleted = clientData.CompleteRegister,
                    Token              = accessToken,
                    RefreshToken       = newRefreshToken.Token
                };
                response.Message = Models.Response.CommentMenssage("TokenRefreshSuccessful");
                response.State   = "000";
                return(Ok(response));
            }
            catch (Exception ex)
            {
                Logger.Error("Message: {0}; Exception: {1}", ex.Message, Framework.Common.SerializeJson.ToObject(ex));
                response.Data    = null;
                response.Message = "Error General";
                response.State   = "099";
                return(BadRequest(response));
            }
            finally
            {
                DateTime dateResponse = DateTime.Now;
                Core.Entity.ConsumptionHistory consumptionHistory = new Core.Entity.ConsumptionHistory
                {
                    ApiName       = Request.Path.Value,
                    Host          = Dns.GetHostName() + ":" + Request.Host.Port,
                    CorrelationId = correlationId,
                    AppUserId     = tokenRefreshRequest.AppUserId,
                    Request       = Framework.Common.SerializeJson.ToObject(tokenRefreshRequest),
                    DateRequest   = dateRequest,
                    Response      = Framework.Common.SerializeJson.ToObject(response),
                    DateResponse  = dateResponse,
                    CodeResponse  = response.State
                };
                _consumptionHistory.Insert(consumptionHistory);
                Logger.Debug("Request: {0} Response: {1}", tokenRefreshRequest, response);
            }
        }
コード例 #7
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public async Task RefreshTokenAsync()
        {
            var loginRequest = new TokenRefreshRequest(ClientId, ClientSecret, AuthTokens.AccessToken);

            await LoginInternal(loginRequest);
        }