APIs seguras com OAuth2

55
APIs seguras com OAuth2 Maceió Dev Meetup #2

Transcript of APIs seguras com OAuth2

Page 1: APIs seguras com OAuth2

APIs seguras comOAuth2

Maceió Dev Meetup #2

Page 2: APIs seguras com OAuth2

Tony Messias

Desenvolvedor Web há +4 anos

Análise de Sistemas CESMAC

@tony0x01

Page 3: APIs seguras com OAuth2

Cliente acessa recursos

usando um Access Token

obtido através de um

fluxo de autorização

Page 4: APIs seguras com OAuth2

Fim :)

Page 5: APIs seguras com OAuth2

OAuth2 > OAuth1(a)

Page 6: APIs seguras com OAuth2

POST /resources HTTP/1.1

Host: api.example.com

Authorization: OAuth oauth_consumer_key="

lWsZaXcyujT8ErqdIlbr0Sn9LaFYNlE2eVCczyvsFKnmBHiBnVrY3xo64

ByB", oauth_nonce="0Sn9LaFYN", oauth_signature="

lWsZaXcyujT8ErqdIlbr0Sn9LaFY", oauth_signature_method="

HMAC-SHA1", oauth_timestamp="1418836421", oauth_token="

96403f692107210ef11f4a02cdbce4af", oauth_version="1.0"

Content-Type: application/json

{ "lorem" : "ipsum" }

Page 7: APIs seguras com OAuth2

POST /resources HTTP/1.1

Host: api.example.com

Authorization: OAuth oauth_consumer_key="

lWsZaXcyujT8ErqdIlbr0Sn9LaFYNlE2eVCczyvsFKnmBHiBnVrY3xo64

ByB", oauth_nonce="0Sn9LaFYN", oauth_signature="

lWsZaXcyujT8ErqdIlbr0Sn9LaFY", oauth_signature_method="

HMAC-SHA1", oauth_timestamp="1418836421", oauth_token="

96403f692107210ef11f4a02cdbce4af", oauth_version="1.0"

Content-Type: application/json

{ "lorem" : "ipsum" }

Page 8: APIs seguras com OAuth2

POST /resources HTTP/1.1

Host: api.example.com

Authorization: Bearer vr5HmMkz123aksdmMibiJUusZwZCHueHue

Content-Type: application/json

{ "lorem" : "ipsum" }

Page 9: APIs seguras com OAuth2

POST /resources HTTP/1.1

Host: api.example.com

Authorization: Bearer vr5HmMkz123aksdmMibiJUusZwZCHueHue

Content-Type: application/json

{ "lorem" : "ipsum" }

Page 10: APIs seguras com OAuth2

Mas o líder do projeto

(OAuth2) deixou o projeto

Page 11: APIs seguras com OAuth2

Inseguro se não

usar SSL/TSL

Page 12: APIs seguras com OAuth2

Inseguro se não

usar SSL/TSL

correto

!

Page 13: APIs seguras com OAuth2
Page 14: APIs seguras com OAuth2

Alguns termos:

Page 15: APIs seguras com OAuth2

Resource Owner

também conhecido

como “usuário”

Page 16: APIs seguras com OAuth2

Resource Server

a sua API

Page 17: APIs seguras com OAuth2

Client

uma aplicação usando o

resource server a mando do

resource owner

Page 18: APIs seguras com OAuth2

Client

sua aplicação {web,mobile}

que utiliza a API

Page 19: APIs seguras com OAuth2

Authorization Server

Uma aplicação que fornece

os Access Tokens aos clients

Page 20: APIs seguras com OAuth2

Fluxos de Autorização

Page 21: APIs seguras com OAuth2

Authorization Code

o mais comum, com toda a

“dança” de redirects

Page 22: APIs seguras com OAuth2

Bob usa

uma aplicação web

Page 23: APIs seguras com OAuth2

Bob tem recursos

nessa aplicação web

Page 24: APIs seguras com OAuth2

Bob quer usar esses

recursos em uma

aplicação de terceiros

Page 25: APIs seguras com OAuth2

<a href=”https://oauth2server.com/auth?response_type=code& client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=photos”>

Login with Facebook</a>

Page 26: APIs seguras com OAuth2
Page 27: APIs seguras com OAuth2

Bob é redirecionado de volta

para a aplicação com um

código

https://oauth2client.com/callback?code=AUTH_CODE_HERE

Page 28: APIs seguras com OAuth2

A aplicação, então, utiliza

esse código para solicitar um

Access Token

Page 29: APIs seguras com OAuth2

POST https://api.oauth2server.com/token grant_type=authorization_code& code=AUTH_CODE_HERE& redirect_uri=REDIRECT_URI& client_id=CLIENT_ID& client_secret=CLIENT_SECRET

Reponse:{ "access_token":"RsT5OjbzRn430zqMLgV3Ia"}

Page 30: APIs seguras com OAuth2

Esse fluxo não é indicado

se o client for SEU

Page 31: APIs seguras com OAuth2

Resource Owner

Credentials

Page 32: APIs seguras com OAuth2

Mas o propósito do OAuth

não é nunca utilizar

credenciais do usuário?

Page 33: APIs seguras com OAuth2

Mais ou menos…

Page 34: APIs seguras com OAuth2

O propósito, na verdade, é

você não precisar fornecer

seu username e password

para terceiros

Page 35: APIs seguras com OAuth2

Mas e quando VOCÊ que

desenvolveu o client que

consome a SUA API?

Page 36: APIs seguras com OAuth2

Não faz sentido ter um

botão “login with X” quando

o X é a sua própria aplicação

Page 37: APIs seguras com OAuth2
Page 38: APIs seguras com OAuth2

Alice fornece seu

usuário e senha

Page 39: APIs seguras com OAuth2

O client (aplicação web)

utiliza essas credenciais para

conseguir um Access Token

Page 40: APIs seguras com OAuth2

POST https://api.oauth2server.com/token grant_type=password& username=USERNAME& password=PASSWORD& client_id=CLIENT_ID

Response:{

“access_token”: “RsT5OjbzRn430zqMLgV3Ia”}

Page 41: APIs seguras com OAuth2

É isso! Sem mais redirects.

Page 42: APIs seguras com OAuth2

Client Credentials

as máquinas também

precisam de autorização!

Page 43: APIs seguras com OAuth2

Paracido com o Resource

Owner Credentials, mas para

aplicações

Page 44: APIs seguras com OAuth2

Exemplo: Microserviços

POST https://api.oauth2server.com/token? grant_type=client_credentials& client_id=CLIENT_ID& client_secret=CLIENT_SECRET

Page 45: APIs seguras com OAuth2

Refresh Token

porque Access Token deve

ter um tempo de vida

Page 46: APIs seguras com OAuth2

Você pode fornecer, junto

com o Access Token, um

Refresh Token e um TTL

Page 47: APIs seguras com OAuth2

Adiciona mais

complexidade aos clients

Page 48: APIs seguras com OAuth2

POSTahttps://api.oauth2server.com/token?

grant_type=refresh_token&refresh_token=TOKEN

{

"access_token": “ACCESS_TOKEN”,

"expires_at": timestamp,

"refresh_token": “REFRESH_TOKEN”

}

Page 49: APIs seguras com OAuth2

Sugestões

Page 50: APIs seguras com OAuth2

Envie os Access Token

via Header

Page 51: APIs seguras com OAuth2
Page 52: APIs seguras com OAuth2

Cuidado com

Single Page Apps

Page 53: APIs seguras com OAuth2

fim!

agora é sério!