Camada de segurança para acesso à API

Bom dia pessoal, tive uma demanda de um colega e estou começando o desenvolvimento de uma camada de segurança para o acesso à API RESTful do mk-auth. E o melhor, pretendo disponibilizá-la em um projeto Open Source no Github para que vcs possam usar livremente!

Não sei se todos aqui tem o conhecimento em desenvolvimento para Web, mas o nosso colega Pedro Filho com certeza tem! O que tenho em mente é criar um serviço a parte, que possa rodar até mesmo em outro servidor, que dê mais segurança e privacidade aos dados dos clientes do provedor.

Como farei isso? Bom, estou pensando em utilizar um sistema de autenticação OAuth2, ou seja, uma api_key individual para cada cliente, juntamente com o protocolo TSL 1.2 pra criptografar os dados. Pretendo usar a linguagem Python pois ela roda facilmente em qualquer SO e é bastante suportada na comunidade.

Não sou um desenvolvedor Web nato, eu sou programador de firmware e software utilizando C/C++, então se alguém tiver mais alguma ideia pra colaborar ou mesmo quiser ajudar no desenvolvimento, sinta-se à vontade em conversar comigo!

Abraços!

Para adicionar comentários, você deve ser membro de MK-AUTH.

Join MK-AUTH

Enviar-me um email quando as pessoas responderem –

Respostas

  • legal, ela funciona na 4.109 pois alterei para a key da API ser a senha em uma autenticação HTTP e não mais ser passada na url como anteriormente, mais o chrome não aceita isso no javascript, ocorre um erro, veja como ficou:

    http://www.mk-auth.com.br/arquivos/api_teste.zip

  • Opa, eu desenvolvi para a versão 4.109 mesmo. Pra alterar para funcionar com as versões anteriores é tranquilo também, dá pra otimizar e colocar como parâmetro qual a versão da API que está rodando.

    Vou criar uma wiki no GitHub para colocar um exemplo de uso pra ficar mais fácil de visualizar.

    Eu usei o Postman pra realizar os testes, lá dá pra passar tranquilamente a autenticação.

    Pedro Filho disse:

    legal, ela funciona na 4.109 pois alterei para a key da API ser a senha em uma autenticação HTTP e não mais ser passada na url como anteriormente, mais o chrome não aceita isso no javascript, ocorre um erro, veja como ficou:

    http://www.mk-auth.com.br/arquivos/api_teste.zip

  • Ótimo isso acompanhando novidades aqui!

  • Pessoal, já está disponível uma versão para testes.

    https://github.com/bviecelli/mk-auth-api-secure

    Qualquer dúvida/sugestão/melhoria vcs podem mandar lá no GitHub mesmo ou pro meu e-mail bviecelli@gmail.com

    Se alguém aqui for desenvolvedor e quiser contribuir com o código, fique à vontade!

    Abraços

  • Pedro como retorno os dados de ramais na API ?

  • Você quer listar os ramais de um cliente ou quer todos os ramais?

    Nos detalhes do cliente vc consegue pegar o ramal dele.

    Creio que não tenha como listar todos os ramais pela API.

    João Luiz disse:

    Pedro como retorno os dados de ramais na API ?

  • verdade, tem muita coisa para colocar mais estou muito sem tempo, mais João cria o arquivo joao.api.class.php e coloca ele dentro de /opt/mk-auth/api/ amigo com o conteúdo que irei colar abaixo e depois para acessar usa a url´s:

    http://api:keyapiqueficanosdadosdaempresa@172.31.255.2/api/joao/listALL

    para pegar todos ramais.

    http://api:keyapiqueficanosdadosdaempresa@172.31.255.2/api/joao/list/172.31.255.1

    para pegar um pelo ip de um ramal que no exemplo é 172.31.255.1 amigo.

    e Bruno obrigado pela ajuda, é incrível o que vc criou amigo...


    Bruno Viecelli disse:

    Você quer listar os ramais de um cliente ou quer todos os ramais?

    Nos detalhes do cliente vc consegue pegar o ramal dele.

    Creio que não tenha como listar todos os ramais pela API.

    João Luiz disse:

    Pedro como retorno os dados de ramais na API ?

  • Conteúdo do arquivo joao.api.class.php

    <?php
    class joao {

    function get_listAll() {
    $queryAPI = "SELECT id, nasname, shortname, secret FROM nas";
    $statement = DB::prepare($queryAPI);
    $statement -> execute();
    $row_rsAPI = $statement -> fetchAll();
    $totalRows = count($row_rsAPI);

    if ($totalRows == 0) {
    echo json_encode('NULL');
    exit();
    }

    echo "{\"JoaoRamais\":";
    echo json_encode($row_rsAPI);
    echo "}";
    }

    function get_list($valor) {
    $queryAPI = "SELECT * FROM nas WHERE nasname = :nasname LIMIT 1";
    $statement = DB::prepare($queryAPI);
    $statement -> bindParam('nasname', $valor);
    $statement -> execute();
    $row_rsAPI = $statement -> fetch();
    $totalRows = count($row_rsAPI);

    if ($totalRows == 0) {
    echo json_encode('NULL');
    exit();
    }

    echo json_encode($row_rsAPI);
    }

    }

    ?>

    joao.api.class.php

  • Por nada, isso vai facilitar a vida de um amigo que usa seu software pois ele precisa de um APP Android pra fornecer pros clientes dele, e com essa API eu deixo o ambiente dele seguro e consigo desenvolver o aplicativo pra ele.

    :)

    Também daria pra usar a base da API para o cliente final pra desenvolver uma outra pra administração. Não seria muito complicado.
    Pedro Filho disse:

    verdade, tem muita coisa para colocar mais estou muito sem tempo, mais João cria o arquivo joao.api.class.php e coloca ele dentro de /opt/mk-auth/api/ amigo com o conteúdo que irei colar abaixo e depois para acessar usa a url´s:

    http://api:keyapiqueficanosdadosdaempresa@172.31.255.2/api/joao/listALL

    para pegar todos ramais.

    http://api:keyapiqueficanosdadosdaempresa@172.31.255.2/api/joao/list/172.31.255.1

    para pegar um pelo ip de um ramal que no exemplo é 172.31.255.1 amigo.

    e Bruno obrigado pela ajuda, é incrível o que vc criou amigo..

  • funcionou, obrigado pedro.

    Pedro Filho disse:

    Conteúdo do arquivo joao.api.class.php

    <?php
    class joao {

    function get_listAll() {
    $queryAPI = "SELECT id, nasname, shortname, secret FROM nas";
    $statement = DB::prepare($queryAPI);
    $statement -> execute();
    $row_rsAPI = $statement -> fetchAll();
    $totalRows = count($row_rsAPI);

    if ($totalRows == 0) {
    echo json_encode('NULL');
    exit();
    }

    echo "{\"JoaoRamais\":";
    echo json_encode($row_rsAPI);
    echo "}";
    }

    function get_list($valor) {
    $queryAPI = "SELECT * FROM nas WHERE nasname = :nasname LIMIT 1";
    $statement = DB::prepare($queryAPI);
    $statement -> bindParam('nasname', $valor);
    $statement -> execute();
    $row_rsAPI = $statement -> fetch();
    $totalRows = count($row_rsAPI);

    if ($totalRows == 0) {
    echo json_encode('NULL');
    exit();
    }

    echo json_encode($row_rsAPI);
    }

    }

    ?>

This reply was deleted.