O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

OAuth2: Uma abordagem para segurança de aplicações e APIs REST - Devcamp 2014

Slides da palestra apresentada no evento Devcamp 2014, em 17/05/2014, Campinas - SP.

OAuth2: Uma abordagem para segurança de aplicações e APIs REST - Devcamp 2014

  1. 1. OAuth2 Uma abordagem para segurança de aplicações e APIs REST
  2. 2. Tiago Marchetti Dophine tiagodolphine@gmail.com @tiagodolphine Sobre?
  3. 3. Agenda • Overview • Características • Fluxos • Conclusões • Exemplo
  4. 4. 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
  5. 5. Exemplo de um cenário atual
  6. 6. Como solucionar?
  7. 7. Armazenar credenciais do usuário?
  8. 8. Armazenar credenciais do usuário?
  9. 9. Como manter a confidencialidade? • Soluções proprietárias o Google AuthSub, o Yahoo BB Auth o AOL Open Auth o FlickrAuth o . . . • Muitos protocolos -> developers ==
  10. 10. OAuth2 Permite uma aplicação acessar uma API no lugar do usuário, de forma segura e padronizada
  11. 11. Características • Centralização e padronização o Identity Management o Autenticação • Papéis bem definidos: o Resource Owner o Resource Server o Client o Authorization Server • Access Token / Refresh Token • HTTPS
  12. 12. De forma resumida... Cliente acessa um recurso utilizando um Access Token. Access token é obtido com fluxos de autorização do OAuth2.
  13. 13. Exemplo de arquitetura
  14. 14. Mas e se eu precisar de uma solução própria ou para minha empresa?
  15. 15. 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)
  16. 16. Authorization Code (Aplicações Web)
  17. 17. 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”
  18. 18. Implicit
  19. 19. Implicit client_id id registrado redirect_uri URI callback response_type “token” scope APIs state livre
  20. 20. Client Credentials (Client == RO)
  21. 21. Client Credentials (Client == RO) client_id id registrado client_secret secret registrada grant_type “client_credentials” scope APIs
  22. 22. Resource Owner Password
  23. 23. Resource Owner Password client_id id registrado client_secret secret registrada grant_type “password” username username password Password scope APIs
  24. 24. 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/fFBGRNJru1F Qd44Az
  25. 25. 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
  26. 26. Porém… Uma camada a mais na arquitetura == Brechas de segurança se mal implementado overhead +requests +delay
  27. 27. Mas quem está usando? Facebook Google Twitter Linkedin PayPal Dropbox Wordpress Microsoft Live . . .
  28. 28. Mãos a obra ! Aplicação cliente para testar o fluxo o Servidor de autorização bem estabelecido o Google e Facebook o Acessar API protegida do Google no lugar do usuário o Usuário utiliza sua conta do Google para login o Usuário dá permissão para minha aplicação o Aplicação NÃO tem acesso as credenciais do usuário o Trocar Google por Facebook para ver se o protocolo é respeitado
  29. 29. Exemplo de arquitetura
  30. 30. Eclipse
  31. 31. 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/
  32. 32. Obrigado ! Tiago Marchetti Dophine tiagodolphine@gmail.com @tiagodolphine

×