entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Problema con la implementación de seguiridad en API-REST con CodeIgniter

Buenos Días,
Actualmente estoy pasando mi sitio de noticias a un API-REST pero cuando le activé la seguridad para usar token y poder dar niveles de acceso de usuarios no me funciona el api con la autentificación:
para el servidor de API-REST en codeigniter utilizo este el proyecto de github
la configuración que le dí al archivo conf del rest fue este:

$config['force_https'] = FALSE;
$config['rest_default_format'] = 'json';
$config['rest_status_field_name'] = 'status';
$config['rest_message_field_name'] = 'error';
$config['enable_emulate_request'] = TRUE;
$config['rest_realm'] = 'REST API';
$config['rest_auth'] = '';
$config['auth_source'] = '';
$config['auth_library_class'] = '';
$config['auth_library_function'] = '';
$config['rest_valid_logins'] = array('admin' => '1234');
$config['rest_ip_whitelist_enabled'] = false;
$config['rest_ip_whitelist'] = '';
$config['rest_ip_blacklist_enabled'] = false;
$config['rest_ip_blacklist'] = '';
$config['rest_database_group'] = 'default';
$config['rest_keys_table'] = 'keys';
$config['rest_enable_keys'] = true;
$config['rest_key_column'] = 'key';
$config['rest_key_length'] = 40;
$config['rest_key_name'] = 'X-API-KEY';
$config['rest_logs_table'] = 'logs';
$config['rest_enable_logging'] = true;
$config['rest_access_table'] = 'access';
$config['rest_enable_access'] = FALSE;
$config['rest_logs_json_params'] = true;
$config['rest_limits_table'] = 'limits';
$config['rest_enable_limits'] = true;
$config['rest_ignore_http_accept'] = FALSE;
$config['rest_ajax_only'] = FALSE;

Tengo en el view de prueba: home.php

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">
    //hacemos la petición a la api con ajax para obtener un usuario por su id
            $.ajax({
                url:'http://localhost/RESTFULL/api/seccion/x-api-key/<?php echo $token;?>',
                type:'GET',
                success: function(data){
                    console.log(data);
                },
                error: function(response){
                    console.log(response);
                }
            });    
</script>

mi Crontolador Home: Home.php

<?php
class Home extends CI_Controller
{
    public function __construct(){
        parent::__construct();
        $this->load->model("MRegister");
    }

    public function index(){
        $generate = $this->MRegister->new_api_key($level = false,$ignore_limits = false,$is_private_key = false,$ip_addresses = "");
        $data = array("titulo" => "Api de RSC","token" => $generate);
        $this->load->helper(array('form','url'));
        $this->load->view("home", $data);
    }    
}

mi Controlador Seccion: Seccion.php

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');
require_once(APPPATH . 'libraries/REST_Controller.php');

class Seccion extends REST_Controller {
    public function __construct(){
        parent::__construct();      
    }

    function index_get(){       
        $secciones = $this->MSeccion->listar();
        if ($secciones) {
            $this->response(array('response' => $secciones), 200);  // Retorna todas las secciones
        }else{
            $this->response(array('error' => "No hay Secciones"), 404);
        }       
    }   
}

Este código funcionaba bien sin poner el token y todo eso de seguridad pero ahora no funciona para nada.
Saludos Atentamente Dairon

1 Respuesta

3votos

white Puntos75880

noté que estas enviando la key por la url, por que es esto?

según la documentación debes enviar la api key en la cabecera de peticion, de modo que tu código javascript quedaría:

$.ajax({
    headers: {
        "X-API-KEY":"<?php echo $token; ?>"
    },
    url:'http://localhost/RESTFULL/api/seccion/x-api-key/<?php echo $token;?>',
    type:'GET',
    success: function(data){
        console.log(data);
    },
    error: function(response){
        console.log(response);
    }
});

si deseas definirlo para todas la peticiones ajax globalmente:

$.ajaxSetup({
    headers: { 'X-API-KEY': 'token aqui' }
});

1voto

dairon comentado

Gracias white, mano como implementó la seguirad y restricciones por usuarios. es decir un usuario visitante o un nivel 1 que solamente pueda leer informacion(get) un level 2 que pueda insertar, actualizar además de leer y un 3 level que pueda hacerlo todo. no se como establecerle el nivel y las restricciones.
Saludos Dairon

0voto

dairon comentado

White ahora tengo problema con la autentificación, le puse en la configuración que es básica y usuario admin con pass 1234 pero no se como pasarcelo por jquery y que me funcione
Saludos Dairon

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta