Upload
tiago-marchetti-dolphine
View
1.605
Download
0
Embed Size (px)
DESCRIPTION
Slides da palestra apresentada no evento Devcamp 2014, em 17/05/2014, Campinas - SP.
Citation preview
OAuth2
Uma abordagem para segurança de aplicações e APIs REST
Agenda
• Overview• Características• Fluxos• Conclusões• Exemplo
Overview
• Crescimento dos sistemas -> maior nº de componentes
• Arquiteturas cada vez mais distribuídas
• Web, mobile, desktop, serviços…
• Plataformas colaborativas
• Interação com diversas APIs externas
• Usuário com múltiplas contas e logins
Exemplo de um cenário atual
Como solucionar?
Armazenar credenciais do usuário?
Armazenar credenciais do usuário?
Como manter a confidencialidade?
• Soluções proprietáriaso Google AuthSub,o Yahoo BB Autho AOL Open Autho FlickrAutho . . .
• Muitos protocolos -> developers ==
OAuth2
Permite uma aplicação acessar uma API no lugar do usuário, de forma segura e padronizada
Características• Centralização e padronização
o Identity Managemento Autenticação
• Papéis bem definidos:o Resource Ownero Resource Servero Cliento Authorization Server
• Access Token / Refresh Token
• HTTPS
De forma resumida...
Cliente acessa um recurso utilizando um Access Token.
Access token é obtido com fluxos de autorização do OAuth2.
Exemplo de arquitetura
Mas e se eu precisar de uma solução própria ou para minha empresa?
Fluxos de autorização
Tipo Quando usar Principal característica
Authorization Code Client é uma aplicação Web ou Nativa
3 legged, pode armazenar secret
Implicit Client é uma aplicação que não pode armazenar secret
Geralmente executado no lado do usuário (javascript no browser, mobile, desktop)
Resource Owner Password Client está sob domínio do Authorization Server
Client tem acesso as credenciais do usuário
Client Credentials Client no papel de Resource Owner
Client armazena secret e não depende do usuário (geralmente é um serviço)
Authorization Code (Aplicações Web)
Authorization Code (Aplicações Web)
client_id id registrado
redirect_uri URI callback
responsetype “code”
scope APIs
state livre
client_id URI callback
client_secret secret registrada
redirect_uri APIs
code id registrado
grant_type “authorization_code”
Implicit
Implicit
client_id id registrado
redirect_uri URI callback
response_type “token”
scope APIs
state livre
Client Credentials (Client == RO)
Client Credentials (Client == RO)
client_id id registrado
client_secret secret registrada
grant_type “client_credentials”
scope APIs
Resource Owner Password
Resource Owner Password
client_id id registrado
client_secret secret registrada
grant_type “password”
username username
password Password
scope APIs
Acesso a um recurso protegido
• GET /plus/v1/people/me HTTP/1.1
Authorization: Bearer 1/fFBGRNJru1FQd44AzqT3Zg
Host: googleapis.com
• GET https://www.googleapis.com/plus/v1/people/{userId}?access_token=1/
fFBGRNJru1FQd44Az
E qual seria a vantagem?
• Flexibilidade
• Independente de implementação
• Deployment diverso (público, privado, corporativo...)
• Interoperabilidade (Web, Android, IOS , Desktop, Server-Server…)
• Utilizar mecanismos que o usuário já confia
• Single Sign-On
• Pode -se trocar de implementação facilmente
Porém…
Uma camada a mais na arquitetura ==
Brechas de segurança se mal implementado
overhead +requests +delay
Mas quem está usando?
PayPal
Dropbox
Wordpress
Microsoft Live
. . .
Mãos a obra !
Aplicação cliente para testar o fluxoo Servidor de autorização bem estabelecido
o Google e Facebooko Acessar API protegida do Google no lugar do usuárioo Usuário utiliza sua conta do Google para logino Usuário dá permissão para minha aplicaçãoo Aplicação NÃO tem acesso as credenciais do usuárioo Trocar Google por Facebook para ver se o protocolo é respeitado
Exemplo de arquitetura
Eclipse
Mais informações• Projeto de exemplo: https://github.com/tiagodolphine/oauth2client
• http://tools.ietf.org/html/rfc6749
• http://oauth.net/2/
• https://developers.google.com/accounts/docs/OAuth2
Getting Started with OAuth 2.0 Programming clients for secure web API authorization and authentication
Crítica
• http://hueniverse.com/2012/07/26/oauth-2-0-and-the-road-to-hell/