Segurança em Microsserviços
Autenticação e Autorização com OAuth2, Spring Security, OpenID,
Keycloak e JWT token.
Quem sou?
Cléber da Silveira
• Arquiteto de software na DBServer.
• Especialista Java.
• Entusiasta DevOps e Cloud
Computing.
• Surfista?
• Problemas com segurança em microserviços;
• Autenticação e Autorização em contâiners web;
• Entendendo OAuth2;
• Entendendo o OpenID;
• Configurando Spring Security;
• Entendendo o KeyCloack;
• Como trabalhar com JWT Token;
• Demo.
Agenda
• Como identificar, criar e separar as permissões de acesso ?
• Como identificar os perfis e fluxos de sistema para diferentes usuários ?
• Quais informações de segurança devem ser compartilhas entre diferentes Api's ?
• Quais URL's devem ser públicas e quais URL's devem ser privadas ?
• Qual o tempo ideal de uma sessão ?
• Como a autenticação auxilia na monetização de API's ?
Problemas
Autenticação Autorização
• Processo de identificação de uma identidade
alegada;
• Validação de credenciais;
• Processos distintos de acesso:
oUsuário e senha;
oBiometria;
oReconhecimento facial;
• Fatores de autenticação:
oO que o usuário é?
oO que o usuário tem?
oO que o usuário conhece?
• Geralmente utiliza-se autenticação de dois fatores.
Autenticação
• Validar privilégios de um usuário previamente
autenticado;
• Tem a função de definir o que um usuário pode fazer no
sistema;
• Valida a periodicidade do tempo que o usuário estará
habilitado a fazer;
• Necessidade de um parceiro para busca de permissões;
• Atua sempre em combinação com a autenticação.
Autorização
• O OAuth2 é o protocolo de autorização mais utilizado em
aplicações web no mundo;
• Utiliza tokens para acessar seus dados em sistemas distribuídos;
• OAuth foi criado para remover a necessidade de os usuários
compartilharem suas senhas com aplicativos de terceiros;
• Usa os Protocolo de autorização como Open ID
Connect, UMA, Green Button e Blue;
• Integração de TLS/SSL;
• Modelo de delegação;
• Fornece o trecho do token denominado access_token.
OAuth2
OAuth2 – Quem usa?
OAuth2 Flow
• OpenID é um padrão aberto e um protocolo de autenticação
descentralizado;
• Possibilidade de compartilhamento de informações de usuários e
contas entre sistemas;
• OpenID foi criado para autenticação federada, ou seja, deixando um
terceiro autenticar seus usuários para você, usando contas que já
possuem;
• Uma única conta e senha para login;
• Fornece o trecho de de token chamado id_token;
• Rápida adoção da comunidade;
• 1 bilhão de contas habilitadas para login;
• 50.000 sistemas habilitados para login via OpenID.
OpenID
OpenID
Spring Security e OAuth2
• Segurança através de papéis;
• Controle facilitado via Annotations;
• Trabalho simplificado para realizar autenticação e autorização;
• Suporte a inúmeros modelos de autenticação;
• Projeto open-source.
Spring Security e OAuth2
Spring Security e OAuth2
• O Keycloak é uma solução open source de gerenciamento de identidade e
acesso voltada para aplicações e serviços modernos;
• Facilita a segurança de aplicativos e serviços com pouco ou nenhum código;
• Autenticação integrado com o protocolo OpenId;
• Autorização com Tokens de Acesso e autorização;
• Single Sign On;
• Session Management;
• Auditoria, Regras e Grupos.
KeyCloak
• Single-Sign On - Uma vez conectado ao Keycloak, os usuários não
precisam se conectar novamente para acessar uma aplicação
diferente;
• Isso também se aplica ao logout;
• Keycloak fornece saída única, o que significa que os usuários só
precisam sair uma vez para serem desconectados de todos os
aplicativos que usam o Keycloak.
KeyCloak
• Social Login - Keycloak também pode autenticar usuários com os provedores
de identidade OpenID Connect ou SAML 2.0 existentes como redes sociais;
• Suporte incorporado para se conectar a servidores LDAP ou Active Directory
existentes. Você também pode implementar seu próprio provedor se você
tiver usuários em outras lojas, como um banco de dados relacionais.
KeyCloak
• JSON Web Token (JWT) é um padrão aberto (RFC 7519) que define uma
maneira compacta e autônoma para transmitir de forma segura informações
entre as partes como um objeto JSON;
• Esta informação pode ser verificada e confiável porque está assinada
digitalmente. JWTs podem ser assinados usando um segredo (com o
algoritmo HMAC) ou um par de chaves público / privado usando RSA;
• Estrutura dividida em três partes Header, Payload e Signature.
JWT Token
JWT Token
JWT Token
{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIyTWhzS0xHS2ZRbHJxNlkyc3pFcHVtVm1rR2Y4MmZXTVN6NlJLcnhac3BBIn0.eyJqdGkiOiI4MGU0ZDZlZS1hYzc1LTRlY2Y
tYmZlMi1kN2Q3MmE0ZWU2MmIiLCJleHAiOjE0OTk4Nzk5NDYsIm5iZiI6MCwiaWF0IjoxNDk5ODc5MzQ2LCJpc3MiOiJodHRwOi8vb2F1dGgtaGxnLmUtdW5pY3JlZC5jb20uYnIvYXV0aC9yZWFs
bXMvVW5pY3JlZFJlYWxtIiwiYXVkIjoiaGxnLWNsaWVudCIsInN1YiI6ImRjNGM5ZGNhLWM3ODEtNGI4OC1hZmFhLTZjNGZjYmEwNzkyZCIsInR5cCI6IkJlYXJlciIsImF6cCI6ImhsZy1jbGllbnQiLCJhdX
RoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiIwMzNkMGE0Mi0yODgzLTRkOGMtYTU1MS1kMzQ2NjllN2E3OTEiLCJhY3IiOiIxIiwiY2xpZW50X3Nlc3Npb24iOiI5NzU1OGU0NS0zNjhkLTQ3NmYt
ODVhNy0zYjkxMWU2MjgxMjkiLCJhbGxvd2VkLW9yaWdpbnMiOltdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiUk9MRV9BRE1JTiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9
sZXMiOlsibWFuYWdlLWFjY291bnQiLCJ2aWV3LXByb2ZpbGUiXX19LCJuYW1lIjoiIiwiZGlzdGluZ3Vpc2hlZE5hbWUiOiJDTj1jYW1pbGEsT1U9MDU2NixPVT1TaXRlMSxPVT1Qcm9kdWNhbyxPVT
1Vc3VhcmlvcyxPVT1UUyxEQz1lLXVuaWNyZWRob21vbG9nLERDPWNvbSxEQz1iciIsInByZWZlcnJlZF91c2VybmFtZSI6ImNhbWlsYS4wNTY2In0.q5phgC7d60djejaBCaEmJ1oMjXJHm5y_5oYup
QMh03KbpBpK-Q1OITgl21nMfc6-7r8zwy4Uq81BrBI_9W37yYhRmnAauRvJEGpQSMMKCboKTLbS17OqAB-
KHUT4pkxH7u3baMBKFll2TjsjYFGLL7fweq_4I7FSkScmQSzIfNDSSQGxlbC18FQpOpMIQcLkqEXr4tW5--
4bcQfAO96uGyJKrEs1tsH6qopQGCbSNvqKc4ttyYpPQf5PYJQMKwGkhaJ89QGVaD4vOisv3DP1B1megBbymr2Kp6GTyHWJZOPWt2b58cNi2XdvG2KGeSo9I2E6v9Y1wDk1ecdIBKepzA","expire
s_in":600,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIyTWhzS0xHS2ZRbHJxNlkyc3pFcHVtVm1rR2Y4MmZXTVN6NlJLcnhac3BBIn0.eyJ
qdGkiOiJhNGEzMmUzZi0zMzJlLTQxODUtYjY3Zi05M2Y1YjIxNjhjNzkiLCJleHAiOjE0OTk4ODExNDYsIm5iZiI6MCwiaWF0IjoxNDk5ODc5MzQ2LCJpc3MiOiJodHRwOi8vb2F1dGgtaGxnLmUtdW5p
Y3JlZC5jb20uYnIvYXV0aC9yZWFsbXMvVW5pY3JlZFJlYWxtIiwiYXVkIjoiaGxnLWNsaWVudCIsInN1YiI6ImRjNGM5ZGNhLWM3ODEtNGI4OC1hZmFhLTZjNGZjYmEwNzkyZCIsInR5cCI6IlJlZnJlc2gi
LCJhenAiOiJobGctY2xpZW50IiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiMDMzZDBhNDItMjg4My00ZDhjLWE1NTEtZDM0NjY5ZTdhNzkxIiwiY2xpZW50X3Nlc3Npb24iOiI5NzU1OGU0
NS0zNjhkLTQ3NmYtODVhNy0zYjkxMWU2MjgxMjkiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiUk9MRV9BRE1JTiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFu
YWdlLWFjY291bnQiLCJ2aWV3LXByb2ZpbGUiXX19fQ.DaJdZFKW_9uFonAsjhseiYqfzDO2BjCRrHIKqWWaF7ZjRiQwemQWd48p_pyt-
BL00EQLKTzSuE7St1w5pk291MY1X1ywpxyNdp1RLcDufQGJMwcgTNjnmUg4DL2MX34cbGEikHJWvUQ8WaS26yJl-a-SeVcgNvGUFWjGwm6rV2p63Yw67yFa2-
wDoca3Og5SPKTDmeALQh1rsiqyXh4UK008f83QvIs-
NAnAY5_rjYoKAVoCs8xt2a3eXhak02WtFCsfkomcYzuNKIkCw7CFKb23wC4JQuD3j0VrnSSdAOXPKN2n1nexpWStaLaN2pSpQ5ZKaCja_c4AA8UTN6OgTw","token_type":"bearer","id_token":"
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIyTWhzS0xHS2ZRbHJxNlkyc3pFcHVtVm1rR2Y4MmZXTVN6NlJLcnhac3BBIn0.eyJqdGkiOiJhOTJiYzRjZS1hZTM2LTQ2MWUtOWVkYy02OD
dmNDkwMjk2NzIiLCJleHAiOjE0OTk4Nzk5NDYsIm5iZiI6MCwiaWF0IjoxNDk5ODc5MzQ2LCJpc3MiOiJodHRwOi8vb2F1dGgtaGxnLmUtdW5pY3JlZC5jb20uYnIvYXV0aC9yZWFsbXMvVW5pY3JlZ
FJlYWxtIiwiYXVkIjoiaGxnLWNsaWVudCIsInN1YiI6ImRjNGM5ZGNhLWM3ODEtNGI4OC1hZmFhLTZjNGZjYmEwNzkyZCIsInR5cCI6IklEIiwiYXpwIjoiaGxnLWNsaWVudCIsImF1dGhfdGltZSI6MCwi
c2Vzc2lvbl9zdGF0ZSI6IjAzM2QwYTQyLTI4ODMtNGQ4Yy1hNTUxLWQzNDY2OWU3YTc5MSIsImFjciI6IjEiLCJuYW1lIjoiIiwiZGlzdGluZ3Vpc2hlZE5hbWUiOiJDTj1jYW1pbGEsT1U9MDU2NixPVT1
TaXRlMSxPVT1Qcm9kdWNhbyxPVT1Vc3VhcmlvcyxPVT1UUyxEQz1lLXVuaWNyZWRob21vbG9nLERDPWNvbSxEQz1iciIsInByZWZlcnJlZF91c2VybmFtZSI6ImNhbWlsYS4wNTY2In0.cPdAaW04
W5sxutscyQolpR74UbYx7s_XfDHzDXU3GXvPVlr5GZxygB2cR4OcvdUsbhxmdYXCDk1SYI95H8_ywE25KwFBid-hFNPJcX1q9gBDOVau5niLX267VBsAMaCLBJ5O-
SBK_6crlLCvbxbAm1ktzvYpsoUAP52SvQJOkH5pZ2rsh0DDprDER7zekicQ2OV0dN53a_9SUCL9v_fNpa0tc4F4K3DIxbsgtcU5s7DEXnOAr9EuRR0huGSSlTDbICL-
bUxjpCMv2lHwet6VFDMshoL1LX0tHL2vHWVgyNAPJvHdUncNZ9rBQHTk7xAovHwBRI5i0AHVPWY3IduKWw","not-before-policy":1496406613,"session_state":"033d0a42-2883-4d8c-a551-
d34669e7a791"}
Bearer Token JWT
Bearer Token JWT
• Possui 34 cooperativas;
• 230 unidades de negócios;
• Presente em 10 estados brasileiros;
• 04 unidades centrais;
• 180 mil cooperados;
• 01 confederação nacional.
Case
https://github.com/csilveir/
Dúvidas ?
www.keycloak.org
www.jwt.io
http://spring.io
http://openid.net
http://oauth.net/2
Referências
clebers@dbserver.com.br
https://www.linkedin.com/in/cleber-da-silveira-b24b0920
@clsilveir
Obrigado!

TDC2017 | São Paulo - Trilha Segurança e Criptografia How we figured out we had a SRE team at - Authentication and Autorization with OAuth2, Spring Security, OpenID, Keycloak and JWT token