Protegendo Microservices em Java
Rodrigo Cândido da Silva
@rcandidosilva
Sobre
• JUG Leader do GUJavaSC
• http://gujavasc.org
• Twitter
• @rcandidosilva
• Contatos
• http://rodrigocandido.me
Agenda
• Microservices
• Segurança
• Spring Cloud Security
• OAuth 2.0
• JWT
• Demo
Monolito vs. Microservices
Monolito vs. Microservices
Microservices
• Pequenos
• Deployment interdependente
• Independente de tecnologia
• Infra-estrutura separada
"Small independent component with well-
defined boundaries that’s doing one thing, but
doing it well"
Segurança
Closed ClosedOpen
Autenticação Autorização
Principais 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 com REST
• Algumas 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
Segurança em Microservices
Segurança em Microservices
• Principais desafios
• Ambiente totalmente distribuido
• Comportamento stateless
• Serviço de segurança centralizado
• Propagação do contexto de segurança
• Single sign-on
• Múltiplos datasources
Spring BootSpring Cloud
Spring Cloud + Netflix OSS
Spring Cloud Security
Discovery	
Client
Relying Party
Resource
Server
Get an access token
& an ID Token (JWT)
Use an access token
Authorization
Server
Iden.ty	Provider	or	
IDP	or		
OpenID	Provider	or	
OP	
	
	
Authorization
Endpoint
Token
Endpoint
Important Stuff
Userinfo
Endpoint
Registration
Endpoint
JWKS
Endpoint
JWKS
Endpoint
Validate
(JWT)
ID Token
/.well-known	
/webfinger	
/openid-configura.on
Check Session IFrame
End Session Endpoint
OAuth 2.0
• 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
OAuth 2.0 Flow
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
Authorization Server
@Configuration
@EnableAuthorizationServer
public class OAuth2Server extends AuthorizationServerConfigurerAdapter {
@Autowired
TokenStore tokenStore;
@Override
public void configure(ClientDetailsServiceConfigurer clients)
throws Exception {
clients.inMemory()
.withClient("client").secret("secret")
.authorizedGrantTypes(“authorization_code",
"refresh_token", "password",
"implicit", "client_credentials").scopes("openid");
}
}
Resource Server
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableResourceServer
public class ResourceServer extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/products/**").authenticated();
}
}
JSON Web Token
“Padrão aberto que define uma forma
compacta e auto-contida para transmitir de
forma segura, informações entre duas partes“
JWT Configuration
@Configuration
public class JwtConfig {
@Autowired
JwtAccessTokenConverter jwtAccessTokenConverter;
@Bean
@Qualifier("tokenStore")
public TokenStore tokenStore() {
return new JwtTokenStore(jwtAccessTokenConverter);
}
@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
KeyPair keyPair = new KeyStoreKeyFactory(
new ClassPathResource("keystore.jks"),
"foobar".toCharArray()).getKeyPair("test");
converter.setKeyPair(keyPair);
return converter;
}
}
JWT Response
{
"access_token":
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTMyODMxNzksInVzZXJfbmFtZSI6InVzZXI
iLCJhdXRob3JpdGllcyI6WyJVU0VSIiwiTUFOQUdFUiJdLCJqdGkiOiJkMGY5OTY2OC01NzdkLTRkZTEtODkw
Yi1hNDY1MTBkZjg2YjAiLCJjbGllbnRfaWQiOiJjbGllbnQiLCJzY29wZSI6WyJvcGVuaWQiXX0.iH1pnwJZP
Zi05hdpY9MDGIvtx34Dj8lxc5fdU5c5NCCtUblT_L9kdZO6NaOIIZffbGzSHoyVUEZkSwkGXm6lT1jRTcOHq2
khAZlwmO3hN3c1xb8bumAgmpF8fJSIKTVIkFJpbVO4uDfHSSbBm6QsTbqHkNgNwWSWbNG1n6ZlsHCcZCh37cm
gbh-B4tPD9QEfH3CSI6Z7AgUbS9UCIytjm02sgxgAr3liOcykRrdcOvxgIBx_yGDvornQ5JOBVdW-TS0-
uJmHe6sHCFYeBNchJhRi7xqZCMYFD6IcP4dftPupzg3IMl5oWberxhZTCCLoi18JtQyZgIgqmSlOAIq8wg",
"token_type": "bearer",
"refresh_token":
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJ1c2VyIiwic2NvcGUiOlsib3Blbml
kIl0sImF0aSI6ImQwZjk5NjY4LTU3N2QtNGRlMS04OTBiLWE0NjUxMGRmODZiMCIsImV4cCI6MTQ5NTgzMTk3
OSwiYXV0aG9yaXRpZXMiOlsiVVNFUiIsIk1BTkFHRVIiXSwianRpIjoiOWVjNWQwY2QtYzhiNy00ZDJmLWFjZ
GQtMGFhMDNhYThjNWM5IiwiY2xpZW50X2lkIjoiY2xpZW50In0.fXSafC9Fuj7rKnDIau9vOmIU4Bn11tLUgx
_5sMOvzFW1sZtzdmJ8cZ7vMJc34Gu9F_gYtBa-
AczYPNFp6ZL2aWgUXllVekSpfCgqPqruTjX2IZdJFk0_4koVAfCpgg3CS88_joQhi3hU0vnXpvse2waA7yT-
zoytt0kbeh_FPsYkTsmZjgmeEyyJqFlxJ0ihSGqvMwCUnPKDz9uZxgvgv_mV_2dXX6PYuDAejIjeHkTCnLeT_
i1jH5BtJbLzBliIu2XxdyXzpwgJRnUHNkLWIih0UvJZrDAETTVEIbqm58AG9l-d7c1T-3idTU-
XC09VZsaL1BQnzp0FzqHXmIY5Og",
"expires_in": 43199,
"scope": "openid",
"jti": "d0f99668-577d-4de1-890b-a46510df86b0"
}
Demo
• Segurança com Microservices
• https://github.com/rcandidosilva/spring-cloud-sample
Perguntas
?
Conclusões…
• Segurança é importante, e não deve ser intrusiva
• Requisitos de segurança em microservices é complexo
• OAuth 2 e JWT oferecem uma boa combinação para
implementação de segurança com serviços
• Spring Cloud Security fornece uma ótima infra-estrutura
para configuração de segurança em uma arquitetura de
microservices
• Enjoy it ;)
Referências
• https://cloud.spring.io/spring-cloud-security/
• https://oauth.net/2/
• https://jwt.io/
• http://presos.dsyer.com/decks/microservice-security.html
• https://github.com/absolutegalaber/jwt-oauth2-example
• http://www.baeldung.com/spring-security-oauth-jwt
• https://stormpath.com/blog/service-to-service
Muito Obrigado!
@rcandidosilva
rodrigocandido.me

Mais conteúdo relacionado

PDF
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
PDF
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
PDF
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
PDF
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
PDF
GUJavaSC - Combinando AngularJS com Java EE
PDF
QCon 2015 - Combinando AngularJS com Java EE
PDF
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
PDF
TDC Floripa 2017 - Criando Microservices Reativos com Java
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
TDC Floripa 2017 - Criando Microservices Reativos com Java

Mais procurados (20)

PDF
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
PDF
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
PDF
TDC 2015 - Segurança em Recursos RESTful com OAuth2
PDF
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
PDF
GUJavaSC - Mini-curso Java EE
PDF
Workshop Microservices - Arquitetura Microservices
PDF
Microservices
PDF
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
PDF
TDC 2016 - Rodando JavaScript Server com Wildfly
PPTX
SGT_ERP_INTEGRACOES_DSS
PPT
Servidor Proxy com squid
PPTX
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
PDF
Workshop Microservices - Construindo APIs RESTful com Spring Boot
PPTX
Microprofile - Facilitando o desenvolvimento de Microserviços
PDF
Mule pe salesforce mule security
PPTX
JWT - Json Web Token
PDF
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
PPTX
Microservices
PDF
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
PPTX
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
TDC 2015 - Segurança em Recursos RESTful com OAuth2
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
GUJavaSC - Mini-curso Java EE
Workshop Microservices - Arquitetura Microservices
Microservices
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
TDC 2016 - Rodando JavaScript Server com Wildfly
SGT_ERP_INTEGRACOES_DSS
Servidor Proxy com squid
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Microprofile - Facilitando o desenvolvimento de Microserviços
Mule pe salesforce mule security
JWT - Json Web Token
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Microservices
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...
Anúncio

Semelhante a GUJavaSC - Protegendo Microservices em Java (20)

PPTX
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...
PPTX
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
PPTX
OAuth2: Uma abordagem para segurança de aplicações e APIs REST - Devcamp 2014
PDF
[DTC21] Thiago Henrique - Microsserviços do Mundo Real
PDF
Segurança de APIs - API eXperience
PPTX
Jwt mais (emoção) segurança na sua aplicação
DOCX
Jwt com implementação apache Oltu
PDF
Visão geral da segurança em Java EE
PDF
API de segurança do Java EE 8
PDF
APIs seguras com OAuth2
PPTX
Segurança em Angular SPA
PDF
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
PDF
OAuth 2.0 e OpenID Connect
PDF
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
PDF
JUGVale 14 - 14/09/2019
PDF
Spring Security e Spring Boot Aula - 2018
PDF
TDC 2016 - Simplificando a segurança de sua aplicação com Java EE
PPS
Segurança J2EE
PDF
OAuth: Gerenciamento de acessos para clientes de APIs
PDF
Explorando mecanismos autenticacao na web
TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we h...
TDC2017 | São Paulo - Trilha Microservices Coaching I How we figured out we h...
OAuth2: Uma abordagem para segurança de aplicações e APIs REST - Devcamp 2014
[DTC21] Thiago Henrique - Microsserviços do Mundo Real
Segurança de APIs - API eXperience
Jwt mais (emoção) segurança na sua aplicação
Jwt com implementação apache Oltu
Visão geral da segurança em Java EE
API de segurança do Java EE 8
APIs seguras com OAuth2
Segurança em Angular SPA
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
OAuth 2.0 e OpenID Connect
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
JUGVale 14 - 14/09/2019
Spring Security e Spring Boot Aula - 2018
TDC 2016 - Simplificando a segurança de sua aplicação com Java EE
Segurança J2EE
OAuth: Gerenciamento de acessos para clientes de APIs
Explorando mecanismos autenticacao na web
Anúncio

Mais de Rodrigo Cândido da Silva (15)

PDF
Java 9, 10 e ... 11
PDF
Cloud Native Java EE
PDF
Protecting Java Microservices: Best Practices and Strategies
PDF
As novidades da nova versão do Java 9
PDF
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
PDF
GUJavaSC - Criando Micro-serviços Reativos com Java
PDF
JavaOne 2016 - Reactive Microservices with Java and Java EE
PDF
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
PDF
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
PDF
ConFoo 2015 - Securing RESTful resources with OAuth2
PDF
GUJavaSC - Unit Testing com Java EE
PDF
JavaOne 2014 - Securing RESTful Resources with OAuth2
PDF
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
PDF
Suportando Aplicações Multi-tenancy com Java EE
PDF
Batch Processing - Processamento em Lotes no Mundo Corporativo
Java 9, 10 e ... 11
Cloud Native Java EE
Protecting Java Microservices: Best Practices and Strategies
As novidades da nova versão do Java 9
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
GUJavaSC - Criando Micro-serviços Reativos com Java
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Securing RESTful resources with OAuth2
GUJavaSC - Unit Testing com Java EE
JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
Suportando Aplicações Multi-tenancy com Java EE
Batch Processing - Processamento em Lotes no Mundo Corporativo

Último (17)

PDF
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
PDF
Processamento da remessa no SAP ERP, SCM610 Col15
PPTX
ccursoammaiacursoammaiacursoammaia123456
PDF
Jira Software projetos completos com scrum
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Analise Estatica de Compiladores para criar uma nova LP
PDF
Aula 9 - Funções 202yttvrcrg5-1.pptx.pdf
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PDF
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
PPTX
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
PPT
Aula de Engenharia de Software principais caracteristicas
PDF
SEMINÁRIO DE IHC - A interface Homem-Máquina
PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Tipos de servidor em redes de computador.pptx
PDF
Banco de Dados 2atualização de Banco de d
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
Processamento da remessa no SAP ERP, SCM610 Col15
ccursoammaiacursoammaiacursoammaia123456
Jira Software projetos completos com scrum
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Analise Estatica de Compiladores para criar uma nova LP
Aula 9 - Funções 202yttvrcrg5-1.pptx.pdf
Processos no SAP Extended Warehouse Management, EWM100 Col26
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
Aula de Engenharia de Software principais caracteristicas
SEMINÁRIO DE IHC - A interface Homem-Máquina
Conceitos básicos de Redes Neurais Artificiais
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Tipos de servidor em redes de computador.pptx
Banco de Dados 2atualização de Banco de d

GUJavaSC - Protegendo Microservices em Java