CSRF com OAuth 2Leonardo B. Cordeiro
Cartão de crédito
?
?
?
?
Sistema Confiável
Sistema Confiável
E agora?
Você confia?
Desenvolvedor e Instrutor
github.com/leonardocordeiro
[email protected]
Leonardo Bernardino Cordeiro
OAuth 2
Cuida de como aplicações clientes podem acessar os dados dos clientes cadastrados no resource server
Authorization: Bearer 123
Authorization: Bearer 123
Resource Owner Credentials Grant
Resource Owner Credentials Grant
302 (Moved Temporarily)
client_id: 987 location: /login
EXPLICAR COMO OBTEVE CLIENT_ID
client_id client_secret
302 (Moved Temporarily)
auth_token: 1234 location: /token/1234
client_id: 987 client_secret: **** auth_token: 1234
access_token: 765
Gera o Access Token e associa a sessão do usuário na livraria.
/pagar access_token: 765
/endereco access_token: 765
endereco: Rua do Ouvidor, 50
access_token: 765
Access Token
access_token: 765
O acesso aos recursos (dados) do usuário foi concedido a um client_id.
Access Token
access_token: 765
O acesso aos recursos (dados) do usuário foi concedido a um client_id.
Access Token
Deve ser invalidado (revogação) depois de um tempo.
Evitar que outras aplicações descubram
Authorization Code Credentials Grant
Não preciso passar minha senha do Paypal
pra Casa do Código!
client_id client_secret
302 (Moved Temporarily)
client_id: 1001 location: /login
302 (Moved Temporarily)
auth_token: 4567 location: /casacodigo/token
Como trocar o auth_token pelo access_token?
O que faz essa URI?
client_id: 987 client_secret: **** auth_token: 1234
access_token: 765
/pagar access_token: 765
/endereco access_token: 543
endereco: <endereço do hacker>
Jamais acessarei essa URI!
<img src=“/images/carro.png”>
<img src=“/images/flores.png”>
<img src=“http://casadocodigo.com.br/.../token/4567”>
?????
<img src=“/token/4567”>
<img src=“/token/4567”>
?
Cross Site Request Forgery
Força o cliente a executar algo que ele nao deseja
Gerar um token e associá-lo a sessão?
Gerar um token e associá-lo a sessão?
E validá-lo na hora de receber um Authorization Code?
302 (Moved Temporarily)
state: 9998 client_id: 987
location: /login
state: 9998 client_id: 987
302 (Moved Temporarily)
state: 9998 auth_token: 1234
location: /token/1234/9998
/token/1234/ 9998
client_id: 987 client_secret: **** auth_token: 1234
<img src=“/token/4567/????”>
Representa a sessão do usuário no Client Application
state
Representa a sessão do usuário no Client Application
Gerado antes do redirect ao Authorization Server (login)
state
Representa a sessão do usuário no Client Application
Gerado antes do redirect ao Authorization Server (login)
Client Application irá validar ao recebê-lo junto com Authorization Token
state
Recomendado no request
state
OAuth2 Spec 4.1.1
Obrigatório na resposta, caso esteja presente no request
state
OAuth2 Spec 4.1.2
Desenvolvedor e Instrutor
github.com/leonardocordeiro
[email protected]
Leonardo Bernardino Cordeiro
Obrigado!