SlideShare uma empresa Scribd logo
Autenticação em APIs
Marcelo Milhomem
Agenda
Agenda
• HTTP REST API
• Autenticação
• SSL / Autoridade Certificadora / Certificados
• Aplicação em Mobile
Autenticação x Autorização
401 vs 403
• 401 Unauthorised - Não autenticado
Eu preciso saber quem você é
• 403 Forbidden - Não autorizado
Eu sei quem você é mas, você não tem direito
Autenticação hoje
HTTP Basic
(Usuário e Senha)
• Cleartext
• Precisa de SSL
• Fácil de "crackear"
• Usuário preguiçoso (mesma senha / senha fraca)
• Mesma senha em vários sistemas
OAuth
(Autenticação + Autorização)
Token / JWT
1 {
2 "sub": "1234567890",
3 "name": "John Doe",
4 "admin": true
5 }
1 HMACSHA256(
2 base64UrlEncode(header) + "." +
3 base64UrlEncode(payload),
4 secret)
1 eyJhbGciOiJIUzI1NiIsInR
2 5cCI6IkpXVCJ9.
3 eyJzdWIiOiIxMjM0NTY3ODk
4 wIiwibmFtZSI6IkpvaG4gRG
5 9lIiwiYWRtaW4iOnRydWV9.
6 TJVA95OrM7E2cBab30RMHrH
7 DcEfxjoYZgeFONFh7HgQ
Todos usam SSL
Por que o SSL?
Certificados
• Par de chaves assimétricas (Pública e Privada)
• Oferece a mesma coisa que o SSL
• Autentica o cliente através da assinatura digital
• Requer um `round trip` extra
Autoridade Certificadora (CA)
• Self signed (todo CA é)
• CA intermediário (cadeias de CA) - boa prática para evitar perda total em caso de
comprometimento da chave privada
• Você é a autoridade :0 dona da verdade
• Utilizar CA intermediários como ACL
Show Case
Ingredientes
Keystore
Certificado do Cliente Certificado do Servidor
Keystore
CA
Gerar certificado do cliente
Gerar certificado - PHP
Gerando par de chaves do cliente
1 /**
2 * Chave privada
3 */
4 $clientPrivateKey = new Crypt_RSA();
5 $clientPrivateKey->setPassword($password);
6 $generatedKeyPair = $clientPrivateKey->createKey();
7 $clientPrivateKey->loadKey($generatedKeyPair['privatekey']);
8 /**
9 * Chave pública
10 */
11 $clientPublicKey = new Crypt_RSA();
12 $clientPublicKey->loadKey($generatedKeyPair['publickey']);
13 $clientPublicKey->setPublicKey();
Gerar certificado - PHP
Par de chaves do CA
1 /**
2 * Chave privada do CA necessária para assinar
3 */
4 $privateKeyIntermediateCA = new Crypt_RSA();
5 $privateKeyIntermediateCA->setPassword('Intermediate CA password');
6 $privateKeyIntermediateCA->loadKey(file_get_contents($privateCAKeyPath));
7 /**
8 * Certificado do CA
9 */
10 $certificateIntermediateCA = new File_X509();
11 $certificateIntermediateCA->setPrivateKey($privateKeyIntermediateCA);
12 $certificateIntermediateCA->loadX509(file_get_contents($certificateCAKeyPath));
Certificado do Cliente - PHPAssinando o certificado
1 /**
2 * CSR - Requisição de certificado
3 */
4 $certificateSigningRequest = new File_X509();
5 $certificateSigningRequest->setDN($certificateIntermediateCA->getDN());
6 $certificateSigningRequest->setPublicKey((object)$clientPublicKey);
7 $certificateX509 = new File_X509();
8 $certificateX509->setEndDate('+1 month');
9 /**
10 * Assinatura do CA
11 */
12 $clientCertificate =
13 $certificateX509->sign($certificateIntermediateCA, $certificateSigningRequest);
14 /**
15 * Resultado chave privada + certificado do cliente
16 */
17 echo $clientPrivateKey->getPrivateKey();
18 echo PHP_EOL;
19 echo $certificateX509->saveX509($clientCertificate);
Certificado do Cliente - Android
1 /**
2 * Certificado do cliente + chave privada empacotados em um arquivo PFX
3 */
4 KeyStore keyStore = KeyStore.getInstance("PKCS12");
5 FileInputStream clientCertificateContent =
6 new FileInputStream("/path/to/publicAndPrivateKey.p12");
7 keyStore.load(clientCertificateContent, "private key password".toCharArray());
8 KeyManagerFactory keyManagerFactory =
9 KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
10 keyManagerFactory.init(keyStore, "private key password".toCharArray());
Embarcar CA
1 -----BEGIN CERTIFICATE-----
2 MIIDnzCCAwigAwIBAgIJAJZTKp0w82kyMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYD
3 VQQGEwJCUjETMBEGA1UECBQKU8OjbyBQYXVsbzETMBEGA1UEBxQKU8OjbyBQYXVs
4 bzERMA8GA1UEChMIRWFzeVRheGkxETAPBgNVBAsTCEVhc3lUYXhpMQswCQYDVQQD
5 EwJFVDEmMCQGCSqGSIb3DQEJARYXY29udGF0b0BlYXN5dGF4aS5jb20uYnIwHhcN
6 MTYwMTE4MTYwNDQ2WhcNMzYwMTEzMTYwNDQ2WjCBkjELMAkGA1UEBhMCQlIxEzAR
7 BgNVBAgUClPDo28gUGF1bG8xEzARBgNVBAcUClPDo28gUGF1bG8xETAPBgNVBAoT
8 CEVhc3lUYXhpMREwDwYDVQQLEwhFYXN5VGF4aTELMAkGA1UEAxMCRVQxJjAkBgkq
9 hkiG9w0BCQEWF2NvbnRhdG9AZWFzeXRheGkuY29tLmJyMIGfMA0GCSqGSIb3DQEB
10 AQUAA4GNADCBiQKBgQDTny6B8fbG1UXEtMYYFKfODKduzYTovLIUzXKFrX9wHEsC
11 lTOLqtvKsvkLkjXsC3R/HedWoRbFXJbaaw723csPlxrxuBqfkNBJB25ihccwVWbP
12 WpEaDluL2btsBdW2uuDshpXk2z6Gf5xcePnmf24iWpvJs1uBJWkEGRR2TzEi8wID
13 AQABo4H6MIH3MB0GA1UdDgQWBBRMm/EjlWrvxXTtUmotq+kwN52u3zCBxwYDVR0j
14 BIG/MIG8gBRMm/EjlWrvxXTtUmotq+kwN52u36GBmKSBlTCBkjELMAkGA1UEBhMC
15 QlIxEzARBgNVBAgUClPDo28gUGF1bG8xEzARBgNVBAcUClPDo28gUGF1bG8xETAP
16 BgNVBAoTCEVhc3lUYXhpMREwDwYDVQQLEwhFYXN5VGF4aTELMAkGA1UEAxMCRVQx
17 JjAkBgkqhkiG9w0BCQEWF2NvbnRhdG9AZWFzeXRheGkuY29tLmJyggkAllMqnTDz
18 aTIwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQAEcW5DO0ODdWd0kZzU
19 6eSg8ckDPImveTiKpFU5a96WxlVmwU8IlwAZ695w6ciIwDjys6BUNUBayTczhJbO
20 83Ykrt+b62+ksqKKFrCcba10R8QSjhYZSy7Yv08m/6+OiP+rUb2Jg4zVdAPhaaVn
21 lb1Nff1EgOdWIdjTKpPzHRjY4g==
22 -----END CERTIFICATE-----
Autoridade Certificadora Aplicativo Mobile
Requisição OkHttp - Android
1 OkHttpClient client = new OkHttpClient();
2 client.setSslSocketFactory(sslContext.getSocketFactory());
3 client.newCall(new Request.Builder()
4 .url("https://easytaxi.com.br")
5 .build()
6 ).execute();
Adicionando Cabeçalhos
1 GET /passenger/56edfd08756f458a6f0041ad HTTP/1.1
2 Host: api.easytaxi.com.br
3 User-Agent: curl/7.43.0
4 X-SSL: 1
5 X-SSL-Client-Verify: 0
6 X-SSL-Client-SHA1: "a01b894d12579d88efce97d27107f380b05f5968"
7 X-SSL-Client-CN: "56edfd08756f458a6f0041ad"
8 X-SSL-Issuer: "/C=BR/OU=EasyTaxi/emailAddress=contato@easytaxi.com.br”
9 X-SSL-Client-Not-Before: "120101100030Z"
10 X-SSL-Client-Not-After: "160101100030Z"
11 Accept: */*
Use Cases
Validade
• Todo certificado tem validade
• Demonstração
• Teste gratuito temporário
• Revalidação de login
Grupos e Cadeias
• Você pode criar vários CAs intermediários
• Criar intermediário e assinar os usuários do grupo com ele
• Revogar um intermediário e todos certificados abaixo dele
• Intermediários também possuem validade
Integridade
• Benefício da autenticação mútua (2WAY)
Assinatura digital
• Não repúdio - Garantia da que o portador assinou
• Assinar documentos digitalmente
• Certificado digital
Offload
Descentralizado
• Servidores conseguem validar o certificado offline
• Precisam apenas compartilhar as chaves do CA
• Ideal para microserviços
Emissão on-demand
• Emissão de certificados dinamicamente
• Let’s Encrypt faz isso para certificado de servidores
• Crie sua PKI para emitir certificados para clientes
Autorização Simples - 403
1 #GET /passenger/56edfd08756f458a6f0041ad HTTP/1.1
2 $uri = current(explode('?', getenv('REQUEST_URI')));
3 preg_match('#[a-zA-Z0-9-]+(/)?$#', $uri, $matches);
4 $passengerId = $matches[0];
5 if ($request->headers->get('X-SSL-Client-CN') != $passengerId) {
6 return new Response('Forbidden', 403);
7 }
Gerar certificado - PHPAssinando o certificado
1 /**
2 * CSR - Requisição de certificado
3 */
4 $certificateSigningRequest = new File_X509();
5 $certificateSigningRequest->setDN($certificateIntermediateCA->getDN());
6 $certificateSigningRequest->setDNProp('uniqueidentifier', 'my unique ID');
7 $certificateSigningRequest->setPublicKey((object)$clientPublicKey);
8 $certificateX509 = new File_X509();
9 $certificateX509->setEndDate('+1 month');
10 /**
11 * Assinatura do CA
12 */
13 $clientCertificate =
14 $certificateX509->sign($certificateIntermediateCA, $certificateSigningRequest);
Por que ninguém ta usando isso?
Perguntas?
Vamos manter contato!
https://legacy.joind.in/17491
https://gist.github.com/milhomem

Mais conteúdo relacionado

Mais procurados

Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2
Cyrille Grandval
 
Bypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilBypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasil
William Costa
 
Mongo + php
Mongo + phpMongo + php
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on Rails
Julio Monteiro
 
Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
Principais ameças à Aplicações Web - Como explorá-las e como se proteger. Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
Clavis Segurança da Informação
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
Waldemar Neto
 
How to use Elasticsearch Analyzers by EmergiNet
How to use  Elasticsearch Analyzers by EmergiNetHow to use  Elasticsearch Analyzers by EmergiNet
How to use Elasticsearch Analyzers by EmergiNet
EmergiNet
 
Mecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBMecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDB
Luiz Duarte
 
"Hacking+PHP"
"Hacking+PHP""Hacking+PHP"
"Hacking+PHP"
Erick Belluci Tedeschi
 
Android chat app com Node.js
Android chat app com Node.jsAndroid chat app com Node.js
Android chat app com Node.js
Luiz Duarte
 
Workshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + MongooseWorkshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + Mongoose
Luiz Duarte
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
João Moura
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
Luiz Henrique Zambom Santana
 
Tony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics ArtifactsTony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics Artifacts
tonyrodrigues
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
Jaime Neto
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
Suissa
 
A vida além do jQuery
A vida além do jQueryA vida além do jQuery
A vida além do jQuery
Paulo Pires
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
Caio Ribeiro Pereira
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHP
Felipe Weckx
 
Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4
William Costa
 

Mais procurados (20)

Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2
 
Bypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilBypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasil
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on Rails
 
Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
Principais ameças à Aplicações Web - Como explorá-las e como se proteger. Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
How to use Elasticsearch Analyzers by EmergiNet
How to use  Elasticsearch Analyzers by EmergiNetHow to use  Elasticsearch Analyzers by EmergiNet
How to use Elasticsearch Analyzers by EmergiNet
 
Mecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBMecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDB
 
"Hacking+PHP"
"Hacking+PHP""Hacking+PHP"
"Hacking+PHP"
 
Android chat app com Node.js
Android chat app com Node.jsAndroid chat app com Node.js
Android chat app com Node.js
 
Workshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + MongooseWorkshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + Mongoose
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
Tony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics ArtifactsTony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics Artifacts
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
A vida além do jQuery
A vida além do jQueryA vida além do jQuery
A vida além do jQuery
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHP
 
Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4
 

Destaque

PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
iMasters
 
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWSPHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
iMasters
 
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSLPHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL
iMasters
 
Waw - Gas
Waw - GasWaw - Gas
Waw - Gas
impactaeventos
 
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesPHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
iMasters
 
PHP Experience 2016 - [Palestra] Json Web Token (JWT)
PHP Experience 2016 - [Palestra] Json Web Token (JWT)PHP Experience 2016 - [Palestra] Json Web Token (JWT)
PHP Experience 2016 - [Palestra] Json Web Token (JWT)
iMasters
 
PHP Experience 2016 - [Workshop] Agile: Test Driven Development
PHP Experience 2016 - [Workshop] Agile: Test Driven DevelopmentPHP Experience 2016 - [Workshop] Agile: Test Driven Development
PHP Experience 2016 - [Workshop] Agile: Test Driven Development
iMasters
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
iMasters
 
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHPPHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
iMasters
 
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...What I learnt: Elastic search & Kibana : introduction, installtion & configur...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
Rahul K Chauhan
 

Destaque (10)

PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWSPHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
 
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSLPHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL
 
Waw - Gas
Waw - GasWaw - Gas
Waw - Gas
 
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesPHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
 
PHP Experience 2016 - [Palestra] Json Web Token (JWT)
PHP Experience 2016 - [Palestra] Json Web Token (JWT)PHP Experience 2016 - [Palestra] Json Web Token (JWT)
PHP Experience 2016 - [Palestra] Json Web Token (JWT)
 
PHP Experience 2016 - [Workshop] Agile: Test Driven Development
PHP Experience 2016 - [Workshop] Agile: Test Driven DevelopmentPHP Experience 2016 - [Workshop] Agile: Test Driven Development
PHP Experience 2016 - [Workshop] Agile: Test Driven Development
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHPPHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
 
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...What I learnt: Elastic search & Kibana : introduction, installtion & configur...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
 

Semelhante a PHP Experience 2016 - [Palestra] Autenticação em APIs

GUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em JavaGUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em Java
Rodrigo Cândido da Silva
 
Certificados Digitais
Certificados DigitaisCertificados Digitais
Certificados Digitais
Humberto Bruno Pontes Silva
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2
Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
Rodrigo Cândido da Silva
 
Manipulando JWT em apis Laravel
Manipulando JWT em apis LaravelManipulando JWT em apis Laravel
Manipulando JWT em apis Laravel
Eduardo Cesar
 
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
Deep Tech Brasil
 
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Jeronimo Zucco
 
Desenvolvimento seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019Desenvolvimento seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019
Alcyon Ferreira de Souza Junior, MSc
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
Helder da Rocha
 
Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11
Rafael Souza
 
Mule pe salesforce mule security
Mule pe   salesforce mule securityMule pe   salesforce mule security
Mule pe salesforce mule security
Jeison Barros
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
Helder da Rocha
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
ricardophp
 
Joomla!, SSL e um pouco sobre segurança
Joomla!, SSL e um pouco sobre segurançaJoomla!, SSL e um pouco sobre segurança
Joomla!, SSL e um pouco sobre segurança
Fernando Soares
 
Configurando servidor web https no apache2 ed
Configurando servidor web https no apache2 edConfigurando servidor web https no apache2 ed
Configurando servidor web https no apache2 ed
Carlos Melo
 
Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!
Fabio Vieira Mello
 
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
tdc-globalcode
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
Mauro Risonho de Paula Assumpcao
 
Segurança em Angular SPA
Segurança em Angular SPASegurança em Angular SPA
Segurança em Angular SPA
Fernando Piancastelli
 
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Alcyon Ferreira de Souza Junior, MSc
 

Semelhante a PHP Experience 2016 - [Palestra] Autenticação em APIs (20)

GUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em JavaGUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em Java
 
Certificados Digitais
Certificados DigitaisCertificados Digitais
Certificados Digitais
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
 
Manipulando JWT em apis Laravel
Manipulando JWT em apis LaravelManipulando JWT em apis Laravel
Manipulando JWT em apis Laravel
 
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realme...
 
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
 
Desenvolvimento seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019Desenvolvimento seguro - WorkSec 2019
Desenvolvimento seguro - WorkSec 2019
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11
 
Mule pe salesforce mule security
Mule pe   salesforce mule securityMule pe   salesforce mule security
Mule pe salesforce mule security
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
 
Joomla!, SSL e um pouco sobre segurança
Joomla!, SSL e um pouco sobre segurançaJoomla!, SSL e um pouco sobre segurança
Joomla!, SSL e um pouco sobre segurança
 
Configurando servidor web https no apache2 ed
Configurando servidor web https no apache2 edConfigurando servidor web https no apache2 ed
Configurando servidor web https no apache2 ed
 
Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!
 
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
 
Segurança em Angular SPA
Segurança em Angular SPASegurança em Angular SPA
Segurança em Angular SPA
 
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
 

Mais de iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
iMasters
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
iMasters
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
iMasters
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
iMasters
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
iMasters
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
iMasters
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
iMasters
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
iMasters
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
iMasters
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
iMasters
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
iMasters
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
iMasters
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
iMasters
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
iMasters
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
iMasters
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
iMasters
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
iMasters
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
iMasters
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
iMasters
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
iMasters
 

Mais de iMasters (20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 

Último

Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
MarcosPaulo777883
 
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdfCADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
NatySousa3
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
cmeioctaciliabetesch
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
mamaeieby
 
Pintura Romana .pptx
Pintura Romana                     .pptxPintura Romana                     .pptx
Pintura Romana .pptx
TomasSousa7
 
Potenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números RacionaisPotenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números Racionais
wagnermorais28
 
Rimas, Luís Vaz de Camões. pptx
Rimas, Luís Vaz de Camões.          pptxRimas, Luís Vaz de Camões.          pptx
Rimas, Luís Vaz de Camões. pptx
TomasSousa7
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
Professor Belinaso
 
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.pptEstrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
livrosjovert
 
A dinâmica da população mundial de acordo com as teorias populacionais.pptx
A dinâmica da população mundial de acordo com as teorias populacionais.pptxA dinâmica da população mundial de acordo com as teorias populacionais.pptx
A dinâmica da população mundial de acordo com as teorias populacionais.pptx
ReinaldoSouza57
 
O que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdfO que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdf
Pastor Robson Colaço
 
Famílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do AssaréFamílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do Assaré
profesfrancleite
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
LucianaCristina58
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
WelberMerlinCardoso
 
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdfCaderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
enpfilosofiaufu
 
Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
DECIOMAURINARAMOS
 
apresentação sobre Clarice Lispector .pptx
apresentação sobre Clarice Lispector .pptxapresentação sobre Clarice Lispector .pptx
apresentação sobre Clarice Lispector .pptx
JuliaMachado73
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
fernandacosta37763
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
Manuais Formação
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
LuizHenriquedeAlmeid6
 

Último (20)

Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
 
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdfCADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
CADERNO DE CONCEITOS E ORIENTAÇÕES DO CENSO ESCOLAR 2024.pdf
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
 
Pintura Romana .pptx
Pintura Romana                     .pptxPintura Romana                     .pptx
Pintura Romana .pptx
 
Potenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números RacionaisPotenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números Racionais
 
Rimas, Luís Vaz de Camões. pptx
Rimas, Luís Vaz de Camões.          pptxRimas, Luís Vaz de Camões.          pptx
Rimas, Luís Vaz de Camões. pptx
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
 
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.pptEstrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
 
A dinâmica da população mundial de acordo com as teorias populacionais.pptx
A dinâmica da população mundial de acordo com as teorias populacionais.pptxA dinâmica da população mundial de acordo com as teorias populacionais.pptx
A dinâmica da população mundial de acordo com as teorias populacionais.pptx
 
O que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdfO que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdf
 
Famílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do AssaréFamílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do Assaré
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
 
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdfCaderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdf
 
Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
 
apresentação sobre Clarice Lispector .pptx
apresentação sobre Clarice Lispector .pptxapresentação sobre Clarice Lispector .pptx
apresentação sobre Clarice Lispector .pptx
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
 

PHP Experience 2016 - [Palestra] Autenticação em APIs

  • 3. Agenda • HTTP REST API • Autenticação • SSL / Autoridade Certificadora / Certificados • Aplicação em Mobile
  • 5. 401 vs 403 • 401 Unauthorised - Não autenticado Eu preciso saber quem você é • 403 Forbidden - Não autorizado Eu sei quem você é mas, você não tem direito
  • 7. HTTP Basic (Usuário e Senha) • Cleartext • Precisa de SSL • Fácil de "crackear" • Usuário preguiçoso (mesma senha / senha fraca) • Mesma senha em vários sistemas
  • 9. Token / JWT 1 { 2 "sub": "1234567890", 3 "name": "John Doe", 4 "admin": true 5 } 1 HMACSHA256( 2 base64UrlEncode(header) + "." + 3 base64UrlEncode(payload), 4 secret) 1 eyJhbGciOiJIUzI1NiIsInR 2 5cCI6IkpXVCJ9. 3 eyJzdWIiOiIxMjM0NTY3ODk 4 wIiwibmFtZSI6IkpvaG4gRG 5 9lIiwiYWRtaW4iOnRydWV9. 6 TJVA95OrM7E2cBab30RMHrH 7 DcEfxjoYZgeFONFh7HgQ
  • 11. Por que o SSL?
  • 12. Certificados • Par de chaves assimétricas (Pública e Privada) • Oferece a mesma coisa que o SSL • Autentica o cliente através da assinatura digital • Requer um `round trip` extra
  • 13. Autoridade Certificadora (CA) • Self signed (todo CA é) • CA intermediário (cadeias de CA) - boa prática para evitar perda total em caso de comprometimento da chave privada • Você é a autoridade :0 dona da verdade • Utilizar CA intermediários como ACL
  • 15. Ingredientes Keystore Certificado do Cliente Certificado do Servidor Keystore CA
  • 17. Gerar certificado - PHP Gerando par de chaves do cliente 1 /** 2 * Chave privada 3 */ 4 $clientPrivateKey = new Crypt_RSA(); 5 $clientPrivateKey->setPassword($password); 6 $generatedKeyPair = $clientPrivateKey->createKey(); 7 $clientPrivateKey->loadKey($generatedKeyPair['privatekey']); 8 /** 9 * Chave pública 10 */ 11 $clientPublicKey = new Crypt_RSA(); 12 $clientPublicKey->loadKey($generatedKeyPair['publickey']); 13 $clientPublicKey->setPublicKey();
  • 18. Gerar certificado - PHP Par de chaves do CA 1 /** 2 * Chave privada do CA necessária para assinar 3 */ 4 $privateKeyIntermediateCA = new Crypt_RSA(); 5 $privateKeyIntermediateCA->setPassword('Intermediate CA password'); 6 $privateKeyIntermediateCA->loadKey(file_get_contents($privateCAKeyPath)); 7 /** 8 * Certificado do CA 9 */ 10 $certificateIntermediateCA = new File_X509(); 11 $certificateIntermediateCA->setPrivateKey($privateKeyIntermediateCA); 12 $certificateIntermediateCA->loadX509(file_get_contents($certificateCAKeyPath));
  • 19. Certificado do Cliente - PHPAssinando o certificado 1 /** 2 * CSR - Requisição de certificado 3 */ 4 $certificateSigningRequest = new File_X509(); 5 $certificateSigningRequest->setDN($certificateIntermediateCA->getDN()); 6 $certificateSigningRequest->setPublicKey((object)$clientPublicKey); 7 $certificateX509 = new File_X509(); 8 $certificateX509->setEndDate('+1 month'); 9 /** 10 * Assinatura do CA 11 */ 12 $clientCertificate = 13 $certificateX509->sign($certificateIntermediateCA, $certificateSigningRequest); 14 /** 15 * Resultado chave privada + certificado do cliente 16 */ 17 echo $clientPrivateKey->getPrivateKey(); 18 echo PHP_EOL; 19 echo $certificateX509->saveX509($clientCertificate);
  • 20. Certificado do Cliente - Android 1 /** 2 * Certificado do cliente + chave privada empacotados em um arquivo PFX 3 */ 4 KeyStore keyStore = KeyStore.getInstance("PKCS12"); 5 FileInputStream clientCertificateContent = 6 new FileInputStream("/path/to/publicAndPrivateKey.p12"); 7 keyStore.load(clientCertificateContent, "private key password".toCharArray()); 8 KeyManagerFactory keyManagerFactory = 9 KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 10 keyManagerFactory.init(keyStore, "private key password".toCharArray());
  • 21. Embarcar CA 1 -----BEGIN CERTIFICATE----- 2 MIIDnzCCAwigAwIBAgIJAJZTKp0w82kyMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYD 3 VQQGEwJCUjETMBEGA1UECBQKU8OjbyBQYXVsbzETMBEGA1UEBxQKU8OjbyBQYXVs 4 bzERMA8GA1UEChMIRWFzeVRheGkxETAPBgNVBAsTCEVhc3lUYXhpMQswCQYDVQQD 5 EwJFVDEmMCQGCSqGSIb3DQEJARYXY29udGF0b0BlYXN5dGF4aS5jb20uYnIwHhcN 6 MTYwMTE4MTYwNDQ2WhcNMzYwMTEzMTYwNDQ2WjCBkjELMAkGA1UEBhMCQlIxEzAR 7 BgNVBAgUClPDo28gUGF1bG8xEzARBgNVBAcUClPDo28gUGF1bG8xETAPBgNVBAoT 8 CEVhc3lUYXhpMREwDwYDVQQLEwhFYXN5VGF4aTELMAkGA1UEAxMCRVQxJjAkBgkq 9 hkiG9w0BCQEWF2NvbnRhdG9AZWFzeXRheGkuY29tLmJyMIGfMA0GCSqGSIb3DQEB 10 AQUAA4GNADCBiQKBgQDTny6B8fbG1UXEtMYYFKfODKduzYTovLIUzXKFrX9wHEsC 11 lTOLqtvKsvkLkjXsC3R/HedWoRbFXJbaaw723csPlxrxuBqfkNBJB25ihccwVWbP 12 WpEaDluL2btsBdW2uuDshpXk2z6Gf5xcePnmf24iWpvJs1uBJWkEGRR2TzEi8wID 13 AQABo4H6MIH3MB0GA1UdDgQWBBRMm/EjlWrvxXTtUmotq+kwN52u3zCBxwYDVR0j 14 BIG/MIG8gBRMm/EjlWrvxXTtUmotq+kwN52u36GBmKSBlTCBkjELMAkGA1UEBhMC 15 QlIxEzARBgNVBAgUClPDo28gUGF1bG8xEzARBgNVBAcUClPDo28gUGF1bG8xETAP 16 BgNVBAoTCEVhc3lUYXhpMREwDwYDVQQLEwhFYXN5VGF4aTELMAkGA1UEAxMCRVQx 17 JjAkBgkqhkiG9w0BCQEWF2NvbnRhdG9AZWFzeXRheGkuY29tLmJyggkAllMqnTDz 18 aTIwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQAEcW5DO0ODdWd0kZzU 19 6eSg8ckDPImveTiKpFU5a96WxlVmwU8IlwAZ695w6ciIwDjys6BUNUBayTczhJbO 20 83Ykrt+b62+ksqKKFrCcba10R8QSjhYZSy7Yv08m/6+OiP+rUb2Jg4zVdAPhaaVn 21 lb1Nff1EgOdWIdjTKpPzHRjY4g== 22 -----END CERTIFICATE----- Autoridade Certificadora Aplicativo Mobile
  • 22. Requisição OkHttp - Android 1 OkHttpClient client = new OkHttpClient(); 2 client.setSslSocketFactory(sslContext.getSocketFactory()); 3 client.newCall(new Request.Builder() 4 .url("https://easytaxi.com.br") 5 .build() 6 ).execute();
  • 23. Adicionando Cabeçalhos 1 GET /passenger/56edfd08756f458a6f0041ad HTTP/1.1 2 Host: api.easytaxi.com.br 3 User-Agent: curl/7.43.0 4 X-SSL: 1 5 X-SSL-Client-Verify: 0 6 X-SSL-Client-SHA1: "a01b894d12579d88efce97d27107f380b05f5968" 7 X-SSL-Client-CN: "56edfd08756f458a6f0041ad" 8 X-SSL-Issuer: "/C=BR/OU=EasyTaxi/emailAddress=contato@easytaxi.com.br” 9 X-SSL-Client-Not-Before: "120101100030Z" 10 X-SSL-Client-Not-After: "160101100030Z" 11 Accept: */*
  • 25. Validade • Todo certificado tem validade • Demonstração • Teste gratuito temporário • Revalidação de login
  • 26. Grupos e Cadeias • Você pode criar vários CAs intermediários • Criar intermediário e assinar os usuários do grupo com ele • Revogar um intermediário e todos certificados abaixo dele • Intermediários também possuem validade
  • 27. Integridade • Benefício da autenticação mútua (2WAY)
  • 28. Assinatura digital • Não repúdio - Garantia da que o portador assinou • Assinar documentos digitalmente • Certificado digital
  • 30.
  • 31.
  • 32.
  • 33. Descentralizado • Servidores conseguem validar o certificado offline • Precisam apenas compartilhar as chaves do CA • Ideal para microserviços
  • 34. Emissão on-demand • Emissão de certificados dinamicamente • Let’s Encrypt faz isso para certificado de servidores • Crie sua PKI para emitir certificados para clientes
  • 35. Autorização Simples - 403 1 #GET /passenger/56edfd08756f458a6f0041ad HTTP/1.1 2 $uri = current(explode('?', getenv('REQUEST_URI'))); 3 preg_match('#[a-zA-Z0-9-]+(/)?$#', $uri, $matches); 4 $passengerId = $matches[0]; 5 if ($request->headers->get('X-SSL-Client-CN') != $passengerId) { 6 return new Response('Forbidden', 403); 7 }
  • 36. Gerar certificado - PHPAssinando o certificado 1 /** 2 * CSR - Requisição de certificado 3 */ 4 $certificateSigningRequest = new File_X509(); 5 $certificateSigningRequest->setDN($certificateIntermediateCA->getDN()); 6 $certificateSigningRequest->setDNProp('uniqueidentifier', 'my unique ID'); 7 $certificateSigningRequest->setPublicKey((object)$clientPublicKey); 8 $certificateX509 = new File_X509(); 9 $certificateX509->setEndDate('+1 month'); 10 /** 11 * Assinatura do CA 12 */ 13 $clientCertificate = 14 $certificateX509->sign($certificateIntermediateCA, $certificateSigningRequest);
  • 37. Por que ninguém ta usando isso?