SlideShare uma empresa Scribd logo
Segurança em Recursos
RESTful com OAuth2
Rodrigo Cândido da Silva
@rcandidosilva
About Me
• JUG Leader do GUJavaSC
• http://gujavasc.org
• Twitter
• @rcandidosilva
• Contatos
• http://rodrigocandido.me
Agenda
• Segurança em APIs
• HTTP Basic Auth
• Network Security
• Certificated Based
• OAuth 2.0
• Porque utilizar OAuth2?
• Conceitos
• Grant types
• Tokens
• Implementações
• Demo
Web Service API’s
Segurança
Closed ClosedOpen
Autenticação Autorização
Quais são os requisitos de segurança?
• Como identificar as permissões que serão manipuladas?
• Como a informação será codificada e decodificada?
• Quais dados serão necessários para restrição de acesso?
• Quem será responsável por armazenar e fornecer os
dados de segurança?
• Como identificar se a requisição não foi modificada?
“Stop bad guys from accessing your resources"
Segurança em APIs
• Estratégias para proteger os serviços
• Basic Auth (HTTP Basic)
• Network Security
• Certificate Based
• Arquitetura RESTful não define procedimentos de
segurança
• HTTP methods: GET, POST, PUT, DELETE
• API’s REST são tão vulneráveis quanto aplicações web
tradicionais
• SQL Injection, replay attacks, cross-site scripting, etc
HTTP Basic Auth
• Qual o problema com isto?
• Nada, mas…
• Em qual lugar você busca as credenciais?
• Ok para sistemas onde todos os participantes podem
compartilhar dados confidenciais de um modo seguro
• Apenas suporta informações de "usuário / senha”
• Apenas trabalha com autenticação
• Sem distinção entre usuários e máquinas
$ curl “https://$username:$password@myhost/resource"
Network Security
• Qual o problema com isto?
• Nada, mas…
• Chato para "debugar" e um pouco difícil de manter
• Configuração fica fora do escopo de desenvolvedores
• Não existe o conceito de identidade e autenticação
"Security architecture based on top of web server"
Certificate Based
• Qual o problema com isto?
• Nada, mas…
• Não existe o conceito de identidade, apenas caso o
browser tenha os certificados instalados
• Obriga keystores e certificados nas aplicações e nos
serviços
• Não existe uma distinção muito clara quanto a usuários
e máquinas
$ curl -k -cert file.pem:password https://myhost:443/resource
Porque OAuth
• Protocolo baseado em uma especificação de padrão
aberto definido pelo IETF
• Habilita as aplicações acessarem e compartilharem
serviços sem necessidade de compartilhar credenciais
• Evita problemas com "passwords"
• Essencial para mecanismo via delegação de acesso
• Aplicações terceiras
• Para serviços específicos
• Por um tempo limitado
• Pode trabalhar com revogação seletiva
Quem está utilizando OAuth
OAuth Timeline
• OAuth 1.0
• Especificação core publicada em dezembro/2007
• OAuth 1.0a
• Especificação revisada publicada em junho/2009
• Relacionado a correções de vulnerabilidades de segurança
• OAuth 2.0
• Especificação publicada em outubro/2012
• Ser mais seguro, simples e padronizado
• RFCs adicionais ainda continuam sendo trabalhadas
OAuth 2.0
• Sem username ou passwords (apenas tokens)
• Protocol para autorização – não autenticação
• Utilizada modelo de delegação
• Evita o password sharing anti-pattern
• Estabelece confiança entre recurso, servidor de identidade e o
cliente da aplicação
• Objetivo principal é simplicidade
• Fortemente integrado com TLS/SSL
• Não é compatível com OAuth1
• Facilidades para revogação
OAuth 2.0 Tokens
• Tipos
• Bearer
• Large random token
• Necessita de SSL para proteção em transito
• Servidor necessita gerar e armazenar este hash
• Mac
• Utilizado para evitar repetição
• Não requer a utilização de SSL
• Apenas suportado no OAuth 1.0
• Access Token
• Short-lived token
• Refresh Token
• Long-lived token
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":“bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
}
OAuth 2.0 Flow
OAuth 2.0 Flow
Papéis Envolvidos
• Resource Server
• Proteção dos serviços
• Authorization Server
• Emissão de tokens de acesso para os clientes
• Client Application
• Solicita os serviços protegidos em nome do proprietário
• Resource Owner
• Concede o acesso a um serviço protegido
OAuth 2.0 Grant Types
• Authorization Code (web apps)
• Confidencialidade aos clientes
• Utiliza um código de autorização emitido pelo servidor
• Implicit (browser-based and mobile apps)
• Script heavy web apps
• Usuário final pode ver o access token gerado
• Resource Owner Password Credentials (user / password)
• Utilizado em casos aonde o usuário confia no cliente
• Expõe as credenciais do usuário para o cliente
• Client Credentials (application)
• Clientes recebem um token (secret) para acesso
• Ideal para acesso entre aplicações
OAuth 2.0 Grant Types
• Authorization Code / Implicit
http://server/oauth/authorize?response_type=code&client_id=client
&scope=read+write+trust
&redirect_uri=http://localhost/app
http://server/oauth/token?grant_type=authorization_code&code=SkiGJ8
&client_id=client
&client_secret=secret
&redirect_uri=http://localhost/app
{"access_token":"292e1ec1-fda9-4968-b1c3-7cc0dd99483f",
"token_type":"bearer",
"expires_in":299997,
"scope":"trust write read"}
OAuth 2.0 Grant Types
• Resource Owner Password Credentials
http://server/oauth/token?grant_type=password&client_id=client
&client_secret=secret
&username=admin
&password=admin
{"access_token":"292e1ec1-fda9-4968-b1c3-7cc0dd99483f",
"token_type":"bearer",
"expires_in":299997,
"scope":"trust write read"}
OAuth 2.0 Grant Types
• Client Credentials
http://server/oauth/token?grant_type=client_credentials
&client_id=client&client_secret=secret
{"access_token":"292e1ec1-fda9-4968-b1c3-7cc0dd99483f",
"token_type":"bearer",
"expires_in":299997,
"scope":"trust write read"}
OAuth 2.0 Prós & Contras
• Prós
• Ótima integração para acesso de aplicações à
serviços oferecidos por web sites
• Acesso permitido para um escopo limitado ou por
tempo (duração)
• Sem necessidade de compartilhamento de
passwords com aplicações terceiras
• Contras
• Implementação pode ser um pouco complexa
• Problemas de interoperabilidade
• Algumas más implementações podem expor falhas
de segurança
OAuth 2.0 Java Implementations
• Algumas implementações Java disponíveis
• Jersey
• Apache Oltu
• Spring Security OAuth2
• Outras: CXF, Google OAuth2 API, etc
• Não suportado ainda como um padrão Java EE
Jersey
• Open source RESTful Web services framework
• Implementação de referência para JAX-RS
• Integrado com as anotações de segurança Java EE
• @RolesAllowed
• @PermitAll
• @DenyAll
• Suporta funcionalidades para filtro de conteúdo
• @EntityFiltering
• Apenas suporta OAuth2 como cliente :/
Apache Oltu
• Implementação do protocolo OAuth da Apache
• Também oferece outras implementações para padrões de
segurança
• JSON Web Token (JWT)
• JSON Web Signature (JWS)
• OpenID Connect
• Suporta todos os requisitos definidos pelo OAuth2
• Authorization Server
• Resource Server
• Client
• Fornece implementação de clientes OAuth2 para
• Facebook, Foursquare, Github, Google, etc
• Ainda continua sendo melhorado…
Spring Security OAuth
• Oferece implementação para OAuth (1a) e OAuth2
• Implementa os 4 tipos de authorization grants
• Suporta todos os requisitos definidos pelo OAuth2
• Authorization Server
• Resources Server
• Client
• Ótima integração com JAX-RS e Spring MVC
• Configuração utilizando anotações
• Integração com todo o eco-sistema Spring
Spring Authorization Server
• @EnableAuthorizationServer
• Anotação utilizada para configurar OAuth2 authorization server
• Existe também disponível em XML <authorization-server/>
• ClientDetailsServiceConfigurer
• Define os detalhes do cliente do serviço
• Implementação in-memory ou via JDBC
• AuthorizationServerTokenServices
• Operações para gerenciar OAuth2 tokens
• Tokens in-memory, JDBC ou JSON Web Token (JWT)
• AuthorizationServerEndpointConfigurer
• Fornece os grant types suportado pelo servidor
• Todos os grant types são suportados exceto via password
Spring Resource Server
• Pode ser a mesma instância do Authorization Server
• Ou então instalado como uma aplicação separada
• Fornece um filtro de autenticação para aplicações web
• @EnableResourceServer
• Anotação utilizada para configurar OAuth2 resource server
• Existe também disponível em XML <resource-server/>
• Suporta controle de acesso via expressions
• #oauth2.clientHasRole
• #oauth2.clientHasAnyRole
• #oauth2.denyClient
Spring OAuth2 Client
• Cria um filtro para armazenar o contexto do request
• Gerencia o redirecionamento de/para o servidor de
autenticação OAuth2
• @EnableOAuth2Client
• Anotação utilizada para configurar o OAuth2 client
• Existe também disponível em XML <client/>
• OAuth2RestTemplate
• Wrapper client object para acessar os serviços
Demo
• OAuth 2.0 Use Case
• Aplicação compartilhando serviços para diferentes clientes
• http://github.com/rcandidosilva/rest-oauth2-sample
Conclusões…
• Segurança é importante, mas não deve ser intrusiva
• OAuth 2.0 é um padrão que possui muitas funcionalidades
• Spring Security oferece uma boa infra-estrutura para
configuração e segurança de aplicações Java
• Spring Security OAuth oferece uma implementação
completa para o protocolo OAuth2
Perguntas
?
Referências
• http://oauth.net/2/
• http://tools.ietf.org/html/rfc6749
• http://projects.spring.io/spring-security-oauth/
• https://github.com/spring-projects/spring-security-oauth
• http://cxf.apache.org/docs/jax-rs-oauth2.html
• https://jersey.java.net/documentation/latest/security.html#d0e10940
• https://oltu.apache.org
Muito obrigado!
@rcandidosilva
rodrigocandido.me

Mais conteúdo relacionado

Destaque (20)

PDF
Descobrindo APIs REST
Guilherme
 
PPTX
Rest API's
Adriano Bonfiglio
 
PPTX
REST: Padrões e Melhores Práticas
Alessandro Oliveira
 
PDF
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
Leonardo Zanivan
 
PDF
GUJavaSC - Unit Testing com Java EE
Rodrigo Cândido da Silva
 
PDF
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Mini-curso Java EE
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Java EE 7 In Action
Rodrigo Cândido da Silva
 
PDF
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
Rodrigo Cândido da Silva
 
ODP
Boas práticas no desenvolvimento de uma RESTful API
Fernando Camargo
 
PDF
muCon 2016: Authentication in Microservice Systems By David Borsos
OpenCredo
 
PDF
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Rodrigo Cândido da Silva
 
PDF
Suportando Aplicações Multi-tenancy com Java EE
Rodrigo Cândido da Silva
 
PDF
Batch Processing - Processamento em Lotes no Mundo Corporativo
Rodrigo Cândido da Silva
 
PDF
OAuth2 and Spring Security
Orest Ivasiv
 
PDF
Vantagens e desvantagens de uma arquitetura microservices
Fábio Rosato
 
PDF
GUJavaSC - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
PDF
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
Rodrigo Cândido da Silva
 
PDF
OAuth with Restful Web Services
Vinay H G
 
PDF
JavaOne 2016 - Reactive Microservices with Java and Java EE
Rodrigo Cândido da Silva
 
Descobrindo APIs REST
Guilherme
 
Rest API's
Adriano Bonfiglio
 
REST: Padrões e Melhores Práticas
Alessandro Oliveira
 
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
Leonardo Zanivan
 
GUJavaSC - Unit Testing com Java EE
Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
Rodrigo Cândido da Silva
 
GUJavaSC - Mini-curso Java EE
Rodrigo Cândido da Silva
 
GUJavaSC - Java EE 7 In Action
Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
Rodrigo Cândido da Silva
 
Boas práticas no desenvolvimento de uma RESTful API
Fernando Camargo
 
muCon 2016: Authentication in Microservice Systems By David Borsos
OpenCredo
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Rodrigo Cândido da Silva
 
Suportando Aplicações Multi-tenancy com Java EE
Rodrigo Cândido da Silva
 
Batch Processing - Processamento em Lotes no Mundo Corporativo
Rodrigo Cândido da Silva
 
OAuth2 and Spring Security
Orest Ivasiv
 
Vantagens e desvantagens de uma arquitetura microservices
Fábio Rosato
 
GUJavaSC - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
Rodrigo Cândido da Silva
 
OAuth with Restful Web Services
Vinay H G
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
Rodrigo Cândido da Silva
 

Semelhante a TDC 2015 - Segurança em Recursos RESTful com OAuth2 (20)

PDF
GUJavaSC - Protegendo Microservices em Java
Rodrigo Cândido da Silva
 
PPTX
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
tdc-globalcode
 
PPTX
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...
tdc-globalcode
 
PDF
TDC2018SP | Trilha Java Enterprise - Protegendo sua API Spring Boot com OAuth2
tdc-globalcode
 
PDF
#TheDevConf 2018 - spring boot ionic oauth2
Luiz Avila
 
PDF
Explorando mecanismos autenticacao na web
Eduardo Cesar
 
PDF
Palestra Joomla Day Brasil 2014 - Extensão de Webservice para Joomla 3
Johnny Salazar Reidel
 
PPTX
Segurança em Angular SPA
Fernando Piancastelli
 
PDF
Mule pe salesforce mule security
Jeison Barros
 
PDF
OAuth 2.0 refresher
marcwan
 
PDF
Introdução a plataforma de aplicativos Redu
Guilherme
 
PDF
PHP SSO no Zentyal
Jackson F. de A. Mafra
 
PDF
Spring Security e Spring Boot Aula - 2018
André Luiz Forchesatto
 
ODP
Manipulando JWT em apis Laravel
Eduardo Cesar
 
PDF
Apresentação sobre o modelo de segurança OPC UA
Dalton Valadares
 
PPTX
Sua Startup precisa de uma WebAPI.
AlexSandro Cruz
 
PDF
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
Rodrigo Cândido da Silva
 
PDF
API de segurança do Java EE 8
Helder da Rocha
 
PDF
introdução a docker e uso de middlware e autenticação com node
FabioAbrantesDiniz
 
PPTX
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...
Renato Groff
 
GUJavaSC - Protegendo Microservices em Java
Rodrigo Cândido da Silva
 
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
tdc-globalcode
 
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...
tdc-globalcode
 
TDC2018SP | Trilha Java Enterprise - Protegendo sua API Spring Boot com OAuth2
tdc-globalcode
 
#TheDevConf 2018 - spring boot ionic oauth2
Luiz Avila
 
Explorando mecanismos autenticacao na web
Eduardo Cesar
 
Palestra Joomla Day Brasil 2014 - Extensão de Webservice para Joomla 3
Johnny Salazar Reidel
 
Segurança em Angular SPA
Fernando Piancastelli
 
Mule pe salesforce mule security
Jeison Barros
 
OAuth 2.0 refresher
marcwan
 
Introdução a plataforma de aplicativos Redu
Guilherme
 
PHP SSO no Zentyal
Jackson F. de A. Mafra
 
Spring Security e Spring Boot Aula - 2018
André Luiz Forchesatto
 
Manipulando JWT em apis Laravel
Eduardo Cesar
 
Apresentação sobre o modelo de segurança OPC UA
Dalton Valadares
 
Sua Startup precisa de uma WebAPI.
AlexSandro Cruz
 
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
Rodrigo Cândido da Silva
 
API de segurança do Java EE 8
Helder da Rocha
 
introdução a docker e uso de middlware e autenticação com node
FabioAbrantesDiniz
 
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...
Renato Groff
 
Anúncio

Mais de Rodrigo Cândido da Silva (15)

PDF
Java 9, 10 e ... 11
Rodrigo Cândido da Silva
 
PDF
Cloud Native Java EE
Rodrigo Cândido da Silva
 
PDF
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Rodrigo Cândido da Silva
 
PDF
Protecting Java Microservices: Best Practices and Strategies
Rodrigo Cândido da Silva
 
PDF
As novidades da nova versão do Java 9
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Arquitetura Microservices
Rodrigo Cândido da Silva
 
PDF
TDC Floripa 2017 - Criando Microservices Reativos com Java
Rodrigo Cândido da Silva
 
PDF
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
Rodrigo Cândido da Silva
 
PDF
QCon 2015 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
PDF
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
Rodrigo Cândido da Silva
 
PDF
ConFoo 2015 - Securing RESTful resources with OAuth2
Rodrigo Cândido da Silva
 
PDF
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
Rodrigo Cândido da Silva
 
Java 9, 10 e ... 11
Rodrigo Cândido da Silva
 
Cloud Native Java EE
Rodrigo Cândido da Silva
 
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Rodrigo Cândido da Silva
 
Protecting Java Microservices: Best Practices and Strategies
Rodrigo Cândido da Silva
 
As novidades da nova versão do Java 9
Rodrigo Cândido da Silva
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Rodrigo Cândido da Silva
 
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Rodrigo Cândido da Silva
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Rodrigo Cândido da Silva
 
Workshop Microservices - Arquitetura Microservices
Rodrigo Cândido da Silva
 
TDC Floripa 2017 - Criando Microservices Reativos com Java
Rodrigo Cândido da Silva
 
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
Rodrigo Cândido da Silva
 
QCon 2015 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
Rodrigo Cândido da Silva
 
ConFoo 2015 - Securing RESTful resources with OAuth2
Rodrigo Cândido da Silva
 
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
Rodrigo Cândido da Silva
 
Anúncio

TDC 2015 - Segurança em Recursos RESTful com OAuth2

  • 1. Segurança em Recursos RESTful com OAuth2 Rodrigo Cândido da Silva @rcandidosilva
  • 2. About Me • JUG Leader do GUJavaSC • http://gujavasc.org • Twitter • @rcandidosilva • Contatos • http://rodrigocandido.me
  • 3. Agenda • Segurança em APIs • HTTP Basic Auth • Network Security • Certificated Based • OAuth 2.0 • Porque utilizar OAuth2? • Conceitos • Grant types • Tokens • Implementações • Demo
  • 6. Quais são os requisitos de segurança? • Como identificar as permissões que serão manipuladas? • Como a informação será codificada e decodificada? • Quais dados serão necessários para restrição de acesso? • Quem será responsável por armazenar e fornecer os dados de segurança? • Como identificar se a requisição não foi modificada? “Stop bad guys from accessing your resources"
  • 7. Segurança em APIs • Estratégias para proteger os serviços • Basic Auth (HTTP Basic) • Network Security • Certificate Based • Arquitetura RESTful não define procedimentos de segurança • HTTP methods: GET, POST, PUT, DELETE • API’s REST são tão vulneráveis quanto aplicações web tradicionais • SQL Injection, replay attacks, cross-site scripting, etc
  • 8. HTTP Basic Auth • Qual o problema com isto? • Nada, mas… • Em qual lugar você busca as credenciais? • Ok para sistemas onde todos os participantes podem compartilhar dados confidenciais de um modo seguro • Apenas suporta informações de "usuário / senha” • Apenas trabalha com autenticação • Sem distinção entre usuários e máquinas $ curl “https://$username:$password@myhost/resource"
  • 9. Network Security • Qual o problema com isto? • Nada, mas… • Chato para "debugar" e um pouco difícil de manter • Configuração fica fora do escopo de desenvolvedores • Não existe o conceito de identidade e autenticação "Security architecture based on top of web server"
  • 10. Certificate Based • Qual o problema com isto? • Nada, mas… • Não existe o conceito de identidade, apenas caso o browser tenha os certificados instalados • Obriga keystores e certificados nas aplicações e nos serviços • Não existe uma distinção muito clara quanto a usuários e máquinas $ curl -k -cert file.pem:password https://myhost:443/resource
  • 11. Porque OAuth • Protocolo baseado em uma especificação de padrão aberto definido pelo IETF • Habilita as aplicações acessarem e compartilharem serviços sem necessidade de compartilhar credenciais • Evita problemas com "passwords" • Essencial para mecanismo via delegação de acesso • Aplicações terceiras • Para serviços específicos • Por um tempo limitado • Pode trabalhar com revogação seletiva
  • 13. OAuth Timeline • OAuth 1.0 • Especificação core publicada em dezembro/2007 • OAuth 1.0a • Especificação revisada publicada em junho/2009 • Relacionado a correções de vulnerabilidades de segurança • OAuth 2.0 • Especificação publicada em outubro/2012 • Ser mais seguro, simples e padronizado • RFCs adicionais ainda continuam sendo trabalhadas
  • 14. OAuth 2.0 • Sem username ou passwords (apenas tokens) • Protocol para autorização – não autenticação • Utilizada modelo de delegação • Evita o password sharing anti-pattern • Estabelece confiança entre recurso, servidor de identidade e o cliente da aplicação • Objetivo principal é simplicidade • Fortemente integrado com TLS/SSL • Não é compatível com OAuth1 • Facilidades para revogação
  • 15. OAuth 2.0 Tokens • Tipos • Bearer • Large random token • Necessita de SSL para proteção em transito • Servidor necessita gerar e armazenar este hash • Mac • Utilizado para evitar repetição • Não requer a utilização de SSL • Apenas suportado no OAuth 1.0 • Access Token • Short-lived token • Refresh Token • Long-lived token { "access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":“bearer", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", }
  • 18. Papéis Envolvidos • Resource Server • Proteção dos serviços • Authorization Server • Emissão de tokens de acesso para os clientes • Client Application • Solicita os serviços protegidos em nome do proprietário • Resource Owner • Concede o acesso a um serviço protegido
  • 19. OAuth 2.0 Grant Types • Authorization Code (web apps) • Confidencialidade aos clientes • Utiliza um código de autorização emitido pelo servidor • Implicit (browser-based and mobile apps) • Script heavy web apps • Usuário final pode ver o access token gerado • Resource Owner Password Credentials (user / password) • Utilizado em casos aonde o usuário confia no cliente • Expõe as credenciais do usuário para o cliente • Client Credentials (application) • Clientes recebem um token (secret) para acesso • Ideal para acesso entre aplicações
  • 20. OAuth 2.0 Grant Types • Authorization Code / Implicit http://server/oauth/authorize?response_type=code&client_id=client &scope=read+write+trust &redirect_uri=http://localhost/app http://server/oauth/token?grant_type=authorization_code&code=SkiGJ8 &client_id=client &client_secret=secret &redirect_uri=http://localhost/app {"access_token":"292e1ec1-fda9-4968-b1c3-7cc0dd99483f", "token_type":"bearer", "expires_in":299997, "scope":"trust write read"}
  • 21. OAuth 2.0 Grant Types • Resource Owner Password Credentials http://server/oauth/token?grant_type=password&client_id=client &client_secret=secret &username=admin &password=admin {"access_token":"292e1ec1-fda9-4968-b1c3-7cc0dd99483f", "token_type":"bearer", "expires_in":299997, "scope":"trust write read"}
  • 22. OAuth 2.0 Grant Types • Client Credentials http://server/oauth/token?grant_type=client_credentials &client_id=client&client_secret=secret {"access_token":"292e1ec1-fda9-4968-b1c3-7cc0dd99483f", "token_type":"bearer", "expires_in":299997, "scope":"trust write read"}
  • 23. OAuth 2.0 Prós & Contras • Prós • Ótima integração para acesso de aplicações à serviços oferecidos por web sites • Acesso permitido para um escopo limitado ou por tempo (duração) • Sem necessidade de compartilhamento de passwords com aplicações terceiras • Contras • Implementação pode ser um pouco complexa • Problemas de interoperabilidade • Algumas más implementações podem expor falhas de segurança
  • 24. OAuth 2.0 Java Implementations • Algumas implementações Java disponíveis • Jersey • Apache Oltu • Spring Security OAuth2 • Outras: CXF, Google OAuth2 API, etc • Não suportado ainda como um padrão Java EE
  • 25. Jersey • Open source RESTful Web services framework • Implementação de referência para JAX-RS • Integrado com as anotações de segurança Java EE • @RolesAllowed • @PermitAll • @DenyAll • Suporta funcionalidades para filtro de conteúdo • @EntityFiltering • Apenas suporta OAuth2 como cliente :/
  • 26. Apache Oltu • Implementação do protocolo OAuth da Apache • Também oferece outras implementações para padrões de segurança • JSON Web Token (JWT) • JSON Web Signature (JWS) • OpenID Connect • Suporta todos os requisitos definidos pelo OAuth2 • Authorization Server • Resource Server • Client • Fornece implementação de clientes OAuth2 para • Facebook, Foursquare, Github, Google, etc • Ainda continua sendo melhorado…
  • 27. Spring Security OAuth • Oferece implementação para OAuth (1a) e OAuth2 • Implementa os 4 tipos de authorization grants • Suporta todos os requisitos definidos pelo OAuth2 • Authorization Server • Resources Server • Client • Ótima integração com JAX-RS e Spring MVC • Configuração utilizando anotações • Integração com todo o eco-sistema Spring
  • 28. Spring Authorization Server • @EnableAuthorizationServer • Anotação utilizada para configurar OAuth2 authorization server • Existe também disponível em XML <authorization-server/> • ClientDetailsServiceConfigurer • Define os detalhes do cliente do serviço • Implementação in-memory ou via JDBC • AuthorizationServerTokenServices • Operações para gerenciar OAuth2 tokens • Tokens in-memory, JDBC ou JSON Web Token (JWT) • AuthorizationServerEndpointConfigurer • Fornece os grant types suportado pelo servidor • Todos os grant types são suportados exceto via password
  • 29. Spring Resource Server • Pode ser a mesma instância do Authorization Server • Ou então instalado como uma aplicação separada • Fornece um filtro de autenticação para aplicações web • @EnableResourceServer • Anotação utilizada para configurar OAuth2 resource server • Existe também disponível em XML <resource-server/> • Suporta controle de acesso via expressions • #oauth2.clientHasRole • #oauth2.clientHasAnyRole • #oauth2.denyClient
  • 30. Spring OAuth2 Client • Cria um filtro para armazenar o contexto do request • Gerencia o redirecionamento de/para o servidor de autenticação OAuth2 • @EnableOAuth2Client • Anotação utilizada para configurar o OAuth2 client • Existe também disponível em XML <client/> • OAuth2RestTemplate • Wrapper client object para acessar os serviços
  • 31. Demo • OAuth 2.0 Use Case • Aplicação compartilhando serviços para diferentes clientes • http://github.com/rcandidosilva/rest-oauth2-sample
  • 32. Conclusões… • Segurança é importante, mas não deve ser intrusiva • OAuth 2.0 é um padrão que possui muitas funcionalidades • Spring Security oferece uma boa infra-estrutura para configuração e segurança de aplicações Java • Spring Security OAuth oferece uma implementação completa para o protocolo OAuth2
  • 34. Referências • http://oauth.net/2/ • http://tools.ietf.org/html/rfc6749 • http://projects.spring.io/spring-security-oauth/ • https://github.com/spring-projects/spring-security-oauth • http://cxf.apache.org/docs/jax-rs-oauth2.html • https://jersey.java.net/documentation/latest/security.html#d0e10940 • https://oltu.apache.org