Globalcode – Open4educationProtegendo sua API Spring Boot
com OAuth2
Trilha – Java Enterprise
Globalcode – Open4education
“Arqueólogo” Java
Desenvolvedor Java desde 1997
P&D Uno Soluções
Instrutor VOffice.
Globalcode – Open4education
Agenda
Segurança
Alguns Métodos de Autenticação
Spring Security
Breve descrição do Ionic Framework
Demo
Q&A
Globalcode – Open4education
Segurança
Autenticação Autorização
Globalcode – Open4education
Verificação se usuário que está acessando
é realmente quem diz ser.
Autenticação Autorização
Globalcode – Open4education
Segurança
Autenticação Autorização
O usuário tem permissão para os recursos
que está tentando acessar
Globalcode – Open4education
Alguns Métodos de autenticação
Soluções “caseiras"
Autenticação baseada Token
HTTP Basic
Assinaturas digitais
OAuth2
Globalcode – Open4education
Alguns Métodos de autenticação
Soluções “caseiras"
Autenticação baseada Token
HTTP Basic
Assinaturas digitais
OAuth2
Globalcode – Open4education
Soluções “caseiras"
Globalcode – Open4education
Soluções “caseiras” Considerações
Globalcode – Open4education
Métodos de autenticação
Soluções "caseiras"
Autenticação baseada Token
HTTP Basic
Assinaturas digitais
OAuth2
Globalcode – Open4education
Autenticação baseada em Token
Globalcode – Open4education
Autenticação baseada em Token
Considerações:
Pouco impacto em performance
Problemas:
Header Tampering
Dictionary Attacks
Man-In-The-Midle
Simples adoção
Recomendado SSL
Globalcode – Open4education
Métodos de autenticação
Soluções caseiras
Autenticação baseada Token
HTTP Basic
Assinaturas digitais
OAuth2
Globalcode – Open4education
HTTP Basic
Authorization: Basic dXN1YXJpbzpzZW5oYQ==
Codificação Base64: usuario:senha
https://www.base64encode.org/
Recomendado SSL
Globalcode – Open4education
HTTP Basic
Considerações:
Pouco impacto em performance
Problema:
Credenciais plaintext
Header Tampering
Dictionary Attacks
Man-In-The-Midle
Simples adoção
Globalcode – Open4education
Métodos de autenticação
Soluções “caseiras"
Autenticação baseada Token
HTTP Basic
Assinaturas digitais
OAuth2
Globalcode – Open4education
Assinatura digital
https://www.devmedia.com.br/autenticacao-de-usuarios-com-certificados-digitais/9495
Globalcode – Open4education
Assinatura digital
Considerações:
Performance afetada na geração de assinaturas
Problemas:
Obriga geração de certificados nas duas pontas
Custo elevado
Nao distingue claramente o usuário
Adoção mais complexa, depende de geração de assinaturas
Globalcode – Open4education
Métodos de autenticação
Soluções “caseiras"
Autenticação baseada Token
HTTP Basic
Assinaturas digitais
OAuth2
Globalcode – Open4education
OAuth2
Protocolo baseado em uma especificação de padrão aberto
IETF - RFC 6749
https://tools.ietf.org/html/rfc6749
Aplicações podem compartilhar recursos sem necessidade
de compartilhar as credenciais
Baseado em tokens
Permite delegação de acesso
Aplicações de terceiros
Tempo limitado
Controle do que pode ser acessado
Vários modos de acesso (usuário ou aplicação)
Globalcode – Open4education
OAuth2 - Quem usa
Globalcode – Open4education
OAuth2 - Roles
Resource Owner
Resource Server
Client
Authorization Server
Globalcode – Open4education
OAuth2 - Fluxo
https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2
https://oauth.net/2/
Globalcode – Open4education
OAuth2 - Token
Tipo Bearer
Não é criptografado, necessita de SSL
String em formato Hash
Identificador para buscar dados de acesso a api
Informações do usuário são armazenadas no servidor
Banco de dados
Memória
Access Token de curta duração
Refresh Token de longa duração
119f2b5b-a5d8-481a-b674-4dec18d7be40
Globalcode – Open4education
Token JWT
Baseado em um padrão aberto IETF - RFC 7519
https://tools.ietf.org/html/rfc7519
Permite envio de informações
Garantia de autenticidade
Globalcode – Open4education
Token JWT - Estrutura
Header
Payload
Signature
Globalcode – Open4education
Token JWT - Estrutura
Header
Tipo: JWT
Algoritmo de hashing
Payload
Signature
Globalcode – Open4education
Token JWT - Estrutura
Header
Payload
Corpo do JWT
Informações armazenadas
Signature
Globalcode – Open4education
Token JWT - Estrutura
Header
Payload
Signature
Assinatura do Token
Validar o Token
jo6PSJgZkI74hbTQxleJ-WS6GWxzmf6xUIaCvvRHnE8
Globalcode – Open4education
OAuth2 - Grant types
Authorization Code
Recursos de terceiros
Implicit
SPA
Resource Owner Password Credentials
Trusted Apps
Client Credentials
machine to machine
Globalcode – Open4education
OAuth2 - Grant types
Authorization Code
Recursos de terceiros
Implicit
SPA
Resource Owner Password Credentials
Trusted Apps
Client Credentials
machine to machine
Globalcode – Open4education
OAuth2 - Authorization Code
Globalcode – Open4education
OAuth2 - Authorization Code
Globalcode – Open4education
OAuth2 - Authorization Code
Globalcode – Open4education
OAuth2 - Authorization Code
Globalcode – Open4education
OAuth2 - Authorization Code
Globalcode – Open4education
OAuth2 - Authorization Code
Globalcode – Open4education
OAuth2 - Password Credentials
Globalcode – Open4education
OAuth2 - Considerações
Uso de SSL
Performance pouco afetada, depende do controle dos
tokens
Problemas:
Implementações podem expor vulnerabilidade
Implementações podem ser complexas
Adoção complexa dependendo do suporte a implementação
Globalcode – Open4education
OAuth2 - Spring Security
Implementação do OAuth2
Implementa os 4 tipos de authorization grant
Suporta o papéis definidos pelo OAuth2
Authorization Server
Resource Server
Client
Fácil integração com ecossistema Spring
configuração via anotações
Globalcode – Open4education
Authorization Server
@EnableAuthorizationServer
Habilita a configuração do Autorization Server
ClientDetailsServiceConfigurer
Configurações do Client
Armazenamento Memória ou Banco de dados
AuthorizationServerTokenServices
Configurações para gerenciamento de Tokens
Memória, Banco de Dados ou JWT
AuthorizationServerEndpointConfigurer
Configurações dos grant types suportados pelo servidor
Globalcode – Open4education
Resource Server
Fornece um filtro de autenticação para as aplicações web
@EnableResourceServer
Habilita a configuração do Resource Server
Configuração do controle de acesso
Globalcode – Open4education
Ionic Framework
Framework para desenvolvimento de aplicativos móveis
híbridos baseado em:
Cordova: integração com recursos nativos do dispositivo (todos)
Angular: framework frontend
Linguagem Typescript
Linguagem tipada
Orientada a objetos
Baseada em Javascript
Gera compilações para todas as plataformas (iOs e Android)
Componentes visuais adaptam-se ao estilo da plataforma
gerada.
Globalcode – Open4education
Demo
https://github.com/lapavila/meuslivros-api
https://github.com/lapavila/meuslivros-app
Projeto Spring Boot API
Projeto Aplicação Cliente Ionic
Globalcode – Open4education
Perguntas
Globalcode – Open4education
Referências
https://www.infoq.com/br/presentations/seguranca-em-recursos-restful-com-oauth2
https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2
https://oauth.net/2/
https://www.digitalocean.com/community/tutorials/uma-introducao-ao-oauth-2-pt
https://projects.spring.io/spring-boot/
https://github.com/spring-projects/spring-security-oauth
https://ionicframework.com/getting-started
https://jwt.io/
Globalcode – Open4education
Obrigado
@lapavila
/lapavila
/luiz.avila
/lapavila

#TheDevConf 2018 - spring boot ionic oauth2