SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
APIs seguras com
OAuth2
Maceió Dev Meetup #2
Tony Messias
Desenvolvedor Web há +4 anos
Análise de Sistemas CESMAC
@tony0x01
Cliente acessa recursos
usando um Access Token
obtido através de um
fluxo de autorização
Fim :)
OAuth2 > OAuth1(a)
POST /resources HTTP/1.1
Host: api.example.com
Authorization: OAuth oauth_consumer_key="
lWsZaXcyujT8ErqdIlbr0Sn9LaFYNlE2eVCczyvsFKnmBHiBnVrY3xo64
ByB", oauth_nonce="0Sn9LaFYN", oauth_signature="
lWsZaXcyujT8ErqdIlbr0Sn9LaFY", oauth_signature_method="
HMAC-SHA1", oauth_timestamp="1418836421", oauth_token="
96403f692107210ef11f4a02cdbce4af", oauth_version="1.0"
Content-Type: application/json
{ "lorem" : "ipsum" }
POST /resources HTTP/1.1
Host: api.example.com
Authorization: OAuth oauth_consumer_key="
lWsZaXcyujT8ErqdIlbr0Sn9LaFYNlE2eVCczyvsFKnmBHiBnVrY3xo64
ByB", oauth_nonce="0Sn9LaFYN", oauth_signature="
lWsZaXcyujT8ErqdIlbr0Sn9LaFY", oauth_signature_method="
HMAC-SHA1", oauth_timestamp="1418836421", oauth_token="
96403f692107210ef11f4a02cdbce4af", oauth_version="1.0"
Content-Type: application/json
{ "lorem" : "ipsum" }
POST /resources HTTP/1.1
Host: api.example.com
Authorization: Bearer vr5HmMkz123aksdmMibiJUusZwZCHueHue
Content-Type: application/json
{ "lorem" : "ipsum" }
POST /resources HTTP/1.1
Host: api.example.com
Authorization: Bearer vr5HmMkz123aksdmMibiJUusZwZCHueHue
Content-Type: application/json
{ "lorem" : "ipsum" }
Mas o líder do projeto
(OAuth2) deixou o projeto
Inseguro se não
usar SSL/TSL
Inseguro se não
usar SSL/TSL
correto!
Alguns termos:
Resource Owner
também conhecido
como “usuário”
Resource Server
a sua API
Client
uma aplicação usando o
resource server a mando do
resource owner
Client
sua aplicação {web,mobile}
que utiliza a API
Authorization Server
Uma aplicação que fornece
os Access Tokens aos clients
Fluxos de Autorização
Authorization Code
o mais comum, com toda a
“dança” de redirects
Bob usa
uma aplicação web
Bob tem recursos
nessa aplicação web
Bob quer usar esses
recursos em uma
aplicação de terceiros
<a href=”https://oauth2server.com/auth?response_type=code&
client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=photos”>
Login with Facebook
</a>
Bob é redirecionado de volta
para a aplicação com um
código
https://oauth2client.com/callback?code=AUTH_CODE_HERE
A aplicação, então, utiliza
esse código para solicitar um
Access Token
POST https://api.oauth2server.com/token
grant_type=authorization_code&
code=AUTH_CODE_HERE&
redirect_uri=REDIRECT_URI&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET
Reponse:
{
"access_token":"RsT5OjbzRn430zqMLgV3Ia"
}
Esse fluxo não é indicado
se o client for SEU
Resource Owner
Credentials
Mas o propósito do OAuth
não é nunca utilizar
credenciais do usuário?
Mais ou menos…
O propósito, na verdade, é
você não precisar fornecer
seu username e password
para terceiros
Mas e quando VOCÊ que
desenvolveu o client que
consome a SUA API?
Não faz sentido ter um
botão “login with X” quando
o X é a sua própria aplicação
Alice fornece seu
usuário e senha
O client (aplicação web)
utiliza essas credenciais para
conseguir um Access Token
POST https://api.oauth2server.com/token
grant_type=password&
username=USERNAME&
password=PASSWORD&
client_id=CLIENT_ID
Response:
{
“access_token”: “RsT5OjbzRn430zqMLgV3Ia”
}
É isso! Sem mais redirects.
Client Credentials
as máquinas também
precisam de autorização!
Paracido com o Resource
Owner Credentials, mas para
aplicações
Exemplo: Microserviços
POST https://api.oauth2server.com/token?
grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET
Refresh Token
porque Access Token deve
ter um tempo de vida
Você pode fornecer, junto
com o Access Token, um
Refresh Token e um TTL
Adiciona mais
complexidade aos clients
POSTahttps://api.oauth2server.com/token?
grant_type=refresh_token&refresh_token=TOKEN
{
"access_token": “ACCESS_TOKEN”,
"expires_at": timestamp,
"refresh_token": “REFRESH_TOKEN”
}
Sugestões
Envie os Access Token
via Header
Cuidado com
Single Page Apps
fim!
agora é sério!
Referências
➔ https://speakerdeck.com/jacksonj04/oauth-101
➔ https://leanpub.com/build-apis-you-wont-hate
➔ http://tools.ietf.org/html/rfc6749
➔ http://alexbilbie.com/
➔ http://oauth2.thephpleague.com/
➔ https://github.com/reddit/reddit/wiki/OAuth2
Referências
➔ https://aaronparecki.
com/articles/2012/07/29/1/oauth2-simplified
➔ http://bshaffer.github.io/oauth2-server-php-
docs/overview/grant-types/
➔ http://pt.slideshare.net/TiagoMarchettiDolphi/oauth2-
uma-abordagem-para-segurana-de-aplicaes-e-apis-
rest-devcamp-2014

Contenu connexe

Tendances

Introdução - Graph API
Introdução  - Graph APIIntrodução  - Graph API
Introdução - Graph APIWilson Govindji
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTRodrigo Cândido da Silva
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSLMarcelo Milhomem
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 

Tendances (6)

Introdução - Graph API
Introdução  - Graph APIIntrodução  - Graph API
Introdução - Graph API
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
 
JAVAle - Open-IdentityStack
JAVAle - Open-IdentityStackJAVAle - Open-IdentityStack
JAVAle - Open-IdentityStack
 
Formas de autenticação tomcat
Formas de autenticação tomcatFormas de autenticação tomcat
Formas de autenticação tomcat
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSL
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 

Similaire à APIs seguras com OAuth2

Introdução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos ReduIntrodução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos ReduGuilherme
 
Sala 2 03 o auth e cadastro de produtos - danilo santos
Sala 2 03   o auth e cadastro de produtos - danilo santosSala 2 03   o auth e cadastro de produtos - danilo santos
Sala 2 03 o auth e cadastro de produtos - danilo santosfsolari
 
Explorando mecanismos autenticacao na web
Explorando mecanismos autenticacao na webExplorando mecanismos autenticacao na web
Explorando mecanismos autenticacao na webEduardo Cesar
 
uMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadouMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadoEduardo Bohrer
 
Identity Server 4 com ASP.NET Core 2
Identity Server 4 com ASP.NET Core 2Identity Server 4 com ASP.NET Core 2
Identity Server 4 com ASP.NET Core 2Ericson da Fonseca
 
2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedoresJardel Weyrich
 
Sua Startup precisa de uma WebAPI.
Sua Startup precisa de uma WebAPI.Sua Startup precisa de uma WebAPI.
Sua Startup precisa de uma WebAPI.AlexSandro Cruz
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Thyago Maia
 
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/11Rafael Souza
 
Brasil Cidadão - SDK V.1.4
Brasil Cidadão - SDK V.1.4Brasil Cidadão - SDK V.1.4
Brasil Cidadão - SDK V.1.4Colaborativismo
 
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
 
Laravel + OAuth 2.0 Server
Laravel + OAuth 2.0 ServerLaravel + OAuth 2.0 Server
Laravel + OAuth 2.0 ServerDaniel Satiro
 
Audit¢rio 11 desenvolvimento de um app ao vivo - pablo moretti
Audit¢rio 11   desenvolvimento de um app ao vivo - pablo morettiAudit¢rio 11   desenvolvimento de um app ao vivo - pablo moretti
Audit¢rio 11 desenvolvimento de um app ao vivo - pablo morettifsolari
 

Similaire à APIs seguras com OAuth2 (20)

Introdução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos ReduIntrodução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos Redu
 
Sala 2 03 o auth e cadastro de produtos - danilo santos
Sala 2 03   o auth e cadastro de produtos - danilo santosSala 2 03   o auth e cadastro de produtos - danilo santos
Sala 2 03 o auth e cadastro de produtos - danilo santos
 
Explorando mecanismos autenticacao na web
Explorando mecanismos autenticacao na webExplorando mecanismos autenticacao na web
Explorando mecanismos autenticacao na web
 
Api v3
Api v3Api v3
Api v3
 
uMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadouMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançado
 
Identity Server 4 com ASP.NET Core 2
Identity Server 4 com ASP.NET Core 2Identity Server 4 com ASP.NET Core 2
Identity Server 4 com ASP.NET Core 2
 
2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores
 
Sua Startup precisa de uma WebAPI.
Sua Startup precisa de uma WebAPI.Sua Startup precisa de uma WebAPI.
Sua Startup precisa de uma WebAPI.
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
 
Politicas de segurança
Politicas de segurançaPoliticas de segurança
Politicas de segurança
 
PHP SSO no Zentyal
PHP SSO no ZentyalPHP SSO no Zentyal
PHP SSO no Zentyal
 
Auth
AuthAuth
Auth
 
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
 
Utilizando a API do Magento 2
Utilizando a API do Magento 2Utilizando a API do Magento 2
Utilizando a API do Magento 2
 
Brasil Cidadão - SDK V.1.4
Brasil Cidadão - SDK V.1.4Brasil Cidadão - SDK V.1.4
Brasil Cidadão - SDK V.1.4
 
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...
 
Laravel + OAuth 2.0 Server
Laravel + OAuth 2.0 ServerLaravel + OAuth 2.0 Server
Laravel + OAuth 2.0 Server
 
Explorando a API Rest Jira Cloud
Explorando a API Rest Jira CloudExplorando a API Rest Jira Cloud
Explorando a API Rest Jira Cloud
 
Audit¢rio 11 desenvolvimento de um app ao vivo - pablo moretti
Audit¢rio 11   desenvolvimento de um app ao vivo - pablo morettiAudit¢rio 11   desenvolvimento de um app ao vivo - pablo moretti
Audit¢rio 11 desenvolvimento de um app ao vivo - pablo moretti
 
Certificados Digitais
Certificados DigitaisCertificados Digitais
Certificados Digitais
 

Plus de Luiz Messias

Phoenix for laravel developers
Phoenix for laravel developersPhoenix for laravel developers
Phoenix for laravel developersLuiz Messias
 
Queues & Async Apps
 Queues & Async Apps Queues & Async Apps
Queues & Async AppsLuiz Messias
 
Laravel's ecosystem
Laravel's ecosystemLaravel's ecosystem
Laravel's ecosystemLuiz Messias
 
Command-Oriented Architecture
Command-Oriented ArchitectureCommand-Oriented Architecture
Command-Oriented ArchitectureLuiz Messias
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to ElasticsearchLuiz Messias
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHPLuiz Messias
 

Plus de Luiz Messias (7)

Phoenix for laravel developers
Phoenix for laravel developersPhoenix for laravel developers
Phoenix for laravel developers
 
Turbolinks
TurbolinksTurbolinks
Turbolinks
 
Queues & Async Apps
 Queues & Async Apps Queues & Async Apps
Queues & Async Apps
 
Laravel's ecosystem
Laravel's ecosystemLaravel's ecosystem
Laravel's ecosystem
 
Command-Oriented Architecture
Command-Oriented ArchitectureCommand-Oriented Architecture
Command-Oriented Architecture
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
 

APIs seguras com OAuth2