oauth2: uma abordagem para segurança de aplicações e apis rest - devcamp 2014

Post on 20-Jun-2015

1.605 Views

Category:

Internet

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Slides da palestra apresentada no evento Devcamp 2014, em 17/05/2014, Campinas - SP.

TRANSCRIPT

OAuth2

Uma abordagem para segurança de aplicações e APIs REST

Tiago Marchetti Dophine

tiagodolphine@gmail.com@tiagodolphine

Sobre?

Agenda

• Overview• Características• Fluxos• Conclusões• Exemplo

Overview

• Crescimento dos sistemas -> maior nº de componentes

• Arquiteturas cada vez mais distribuídas

• Web, mobile, desktop, serviços…

• Plataformas colaborativas

• Interação com diversas APIs externas

• Usuário com múltiplas contas e logins

Exemplo de um cenário atual

Como solucionar?

Armazenar credenciais do usuário?

Armazenar credenciais do usuário?

Como manter a confidencialidade?

• Soluções proprietáriaso Google AuthSub,o Yahoo BB Autho AOL Open Autho FlickrAutho . . .

• Muitos protocolos -> developers ==

OAuth2

Permite uma aplicação acessar uma API no lugar do usuário, de forma segura e padronizada

Características• Centralização e padronização

o Identity Managemento Autenticação

• Papéis bem definidos:o Resource Ownero Resource Servero Cliento Authorization Server

• Access Token / Refresh Token

• HTTPS

De forma resumida...

Cliente acessa um recurso utilizando um Access Token.

Access token é obtido com fluxos de autorização do OAuth2.

Exemplo de arquitetura

Mas e se eu precisar de uma solução própria ou para minha empresa?

Fluxos de autorização

Tipo Quando usar Principal característica

Authorization Code Client é uma aplicação Web ou Nativa

3 legged, pode armazenar secret

Implicit Client é uma aplicação que não pode armazenar secret

Geralmente executado no lado do usuário (javascript no browser, mobile, desktop)

Resource Owner Password Client está sob domínio do Authorization Server

Client tem acesso as credenciais do usuário

Client Credentials Client no papel de Resource Owner

Client armazena secret e não depende do usuário (geralmente é um serviço)

Authorization Code (Aplicações Web)

Authorization Code (Aplicações Web)

client_id id registrado

redirect_uri URI callback

responsetype “code”

scope APIs

state livre

client_id URI callback

client_secret secret registrada

redirect_uri APIs

code id registrado

grant_type “authorization_code”

Implicit

Implicit

client_id id registrado

redirect_uri URI callback

response_type “token”

scope APIs

state livre

Client Credentials (Client == RO)

Client Credentials (Client == RO)

client_id id registrado

client_secret secret registrada

grant_type “client_credentials”

scope APIs

Resource Owner Password

Resource Owner Password

client_id id registrado

client_secret secret registrada

grant_type “password”

username username

password Password

scope APIs

Acesso a um recurso protegido

• GET /plus/v1/people/me HTTP/1.1

Authorization: Bearer 1/fFBGRNJru1FQd44AzqT3Zg

Host: googleapis.com

• GET https://www.googleapis.com/plus/v1/people/{userId}?access_token=1/

fFBGRNJru1FQd44Az

E qual seria a vantagem?

• Flexibilidade

• Independente de implementação

• Deployment diverso (público, privado, corporativo...)

• Interoperabilidade (Web, Android, IOS , Desktop, Server-Server…)

• Utilizar mecanismos que o usuário já confia

• Single Sign-On

• Pode -se trocar de implementação facilmente

Porém…

Uma camada a mais na arquitetura ==

Brechas de segurança se mal implementado

overhead +requests +delay

Mas quem está usando?

Facebook

Google

Twitter

Linkedin

PayPal

Dropbox

Wordpress

Microsoft Live

. . .

Mãos a obra !

Aplicação cliente para testar o fluxoo Servidor de autorização bem estabelecido

o Google e Facebooko Acessar API protegida do Google no lugar do usuárioo Usuário utiliza sua conta do Google para logino Usuário dá permissão para minha aplicaçãoo Aplicação NÃO tem acesso as credenciais do usuárioo Trocar Google por Facebook para ver se o protocolo é respeitado

Exemplo de arquitetura

Eclipse

Obrigado !

Tiago Marchetti Dophine

tiagodolphine@gmail.com

@tiagodolphine

top related