Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JWT - Mais segurança na sua aplicação

JWT - Mais segurança na sua aplicação

Palestra ministrada no PHPSP Santos Talks #2 (2016). Falamos um pouco sobre JWT e como implementá-lo usando PHP.

Gustavo Pereira

June 29, 2016
Tweet

More Decks by Gustavo Pereira

Other Decks in Technology

Transcript

  1. Como podemos garantir uma segurança maior na troca de informações

    entre o client/server e entre múltiplas instâncias da mesma aplicação?
  2. Quem sou eu? 12 anos na área de TI Bacharel

    em Ciências da Computação Tecnólogo em Processamento de Dados Zend Certified PHP Engineer 5.5 Desenvolvedor PL na MT4 Networks http://www.mt4networks.com.br
  3. Cliente Servidor BD /login.php (username: x, password: y) (Select username

    from users…) PHP SESSID=toorf9xB(...) Usuario Permissões Guarda Sessão
  4. Cliente Servidor BD /login.php (username: x, password: y) (Select username

    from users…) Usuario Permissões Guarda Sessão PHP SESSID=toorf9xB(...) Sucesso! Nota: Resista a tentação de guardar permissões, dados sensíveis de usuário nos COOKIES.
  5. Payload (Reservados e opcionais!) "iss" - emissor "sub" - objetivo/assunto

    "aud" - consumidor "exp" - expiração "nbf" - not before "iat" - criado em "jti" - JWT ID
  6. Payload (Públicos) "adm" - É admin? "uid" - ID do

    usuário "lpd" - Ultimo produto comprado Ou seja… o que você quiser! CUIDADO
  7. E no final teremos... eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI 1NiIsImp0aSI6IjRmMWcyM2ExMm FhIn0.eyJpc3MiOiJodHRwOlwvXC9 waHBzcHNhbnRvcy5jb20iLCJhdWQ iOiJodHRwOlwvXC9leGFtcGxlLm9y ZyIsImp0aSI6IjRmMWcyM2ExMmF

    hIiwiaWF0IjoxNTA2Nzc2MDczLCJu YmYiOjE1MDY3NzYxMzMsImV4cC I6MTUwNjc3OTY3MywidWlkIjoxL CJscGQiOjEyMzM0OTF9.5ui0_hs6W KFFMPHwVBbgANlTufQMWN-uB- G2glCxE_Q
  8. Chave assimétrica $entSign = new Sha256(); $entKeyChain = new Keychain();

    $token = (new Builder())->setIssuer('http://phpspsantos.com'); $token->sign( $entSign, $entKeyChain->getPrivateKey($dirPrivKey) );
  9. Chave assimétrica $entSign = new Sha256(); $entKeyChain = new Keychain();

    $token = (new Builder())->setIssuer('http://phpspsantos.com'); $token->verify( $entSign, $entKeyChain->getPublicKey($dirPublicKey) );
  10. 2. Não dá pra gerenciar o lado do cliente Se

    o cliente perde o celular, como fazer com que o aplicativo ''seja deslogado"?
  11. 2. Não dá pra gerenciar o lado do cliente Guardar

    os tokens emitidos (NoSQL)? Trocamos a chave privada? Quando o usuário logar em um dispositivo, mostramos a lista dos dispositivos conectados?