private async Task<KeycloakToken> GetToken() { var keyToken = "token"; KeycloakToken resultToken = null; var tokenSession = _httpContextAccesor.HttpContext.Session.GetString(keyToken); //ToDo: Cambiar por un sessionTokenManager if (string.IsNullOrEmpty(tokenSession)) { resultToken = await _keycloakClient.GetToken(_options.ClientId, _options.ClientSecret); } else { resultToken = JsonConvert.DeserializeObject<KeycloakToken>(tokenSession); if (_options.EnableRefreshToken) { var unixTime = new DateTimeOffset(DateTime.Now); var jwt = new JwtSecurityToken(resultToken.AccessToken); if (jwt.Payload.Exp.HasValue && unixTime.ToUnixTimeSeconds() > jwt.Payload.Exp.Value) { resultToken = await _keycloakClient.GetToken(_options.ClientId, _options.ClientSecret, resultToken.RefreshToken); } } } _httpContextAccesor.HttpContext.Session.SetString(keyToken, JsonConvert.SerializeObject(resultToken)); return resultToken; }