Cielo LIO
Design & Security
Rafael Rocha
rafael.rocha@sensedia.com
+55 19 9 9649.1506
Luis Moraes
luis.junior@cielo.com.br
+55 19 9 98118.8160
DESIGN DE APIs
info:
version: 0.0.1
title: My API
- API Version
- Pragmatic REST
- One size fits all ?
Some
Trends
Versão
URI: https://api.cielo.com.br/order-management/v1/orders
HTTP ou
HTTPS
Seu domínio Nome da API
(opcional)
Recursos e
Parâmetros
Outras alternativas:
• Hostname (v1.api.foo.com)
• Query parameter (api.foo.com/v1/bar?version=1)
• Content-type header
• No version
Nunca quebre o cliente!!
API Version na URI
Pragmatic
REST
- URIs são projetadas com
cuidado
- Cada URI representa um
recurso
- Cada ação em um recurso é
feita através do verbo HTTP
- O resultado é expresso pelo
status HTTP
Coleção
/orders
Resources
Elemento
/orders/{id}
200
400
500
Resultado OK
Erro no Cliente
Erro no Servidor
201 Criado
202 Aceio
401 NãoAutorizado
405 Operação nãopermitida
413 Request muito grande
429 Muitas requisições
503 Servidor não disponível
HTTP Status Code
Código Erro
200 OK
201 Created
204 Empty
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
413 Request is to Large
422 Unprocessable Entity
429 Too Many Requests
500 Internal Server Error
Código Erro
200 OK
201 Created
204 Empty
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
413 Request is to Large
422 Unprocessable Entity
429 Too Many Requests
500 Internal Server Error
Resource POST
(create)
GET
(read)
PUT
(update, create)
DELETE
(delete)
/orders Cria novo
pedido
Lista pedidos -- Apaga todos
os pedidos
/orders/3747 -- Mostra pedido
3747
Atualiza pedido
3747, se não
existir, cria
Apaga pedido
3747
HTTP Method
One size fits all: YES or NO ?!
Faz sentido ter a mesma API para
todos os desenvolvedores ?
One size fits all: YES !
Porque sim ?
> Time de API pode manter o foco em apenas UMA única
API, precisa e bem documentada.
> Reduz os custos com treinamento dos times de
desenvolvimento.
> Pode suportar um conjunto abrangente de
desenvolvedores, mesmo ainda com perfis
desconhecidos.
Mas:
> Trata todos os clientes de forma generalizada, não há
otimização para ninguém.
> Time de API se torna uma pedra no sapato do Time de
Frontend/UI.
One size fits all: NO !
Porque não ?
> Algumas diferenças comuns entre clientes:
> Capacidade de Memória
> Markup types diferentes (XML vs JSON vs FLAT)
> Conectividade
> Modelo de interação com usuário
> Volume de acessos
> Separar os conceitos:
> Conteúdo
> Formato
> Entrega
> Superar as diferenças de devices plugados na API
One size fits all: YES or NO ?!
> Alternativa: Porque não ter as duas opções
?
One size fits all: YES ! - Exemplo
One size fits all: YES ! - Exemplo
One size fits all: NO ! - Exemplo
One size fits all: NO ! - Exemplo
One size fits all: NO ! - Exemplo
https://desenvolvedores.cielo.com.br/
SEGURANÇA
Restricted
Restritas a parceiros autorizados
Open
Abertas para qualquer
desenvolvedor
Private
Uso limitado a equipes internas
da empresa
TIPOS DE APIs
APIs
Serviços CIELO
PDV Automação
APIs
Autenticação
Autorização
Disponibilidade
Privacidade
Auditoria
Integridade
API Gateway
PDV Automação
Serviços CIELO
Autenticação /
Autorização
Usuários Apps
Basic HTTP OAuth2 OpenID Connect
Estratégias de Autenticação / Autorização
App Token
Basic HTTP
App Token
OAuth2
OpenID Connect
❖ Protocolo de autorização que provê
acesso seguro aos resources delegado
pelo dono dos dados
❖ Client App se registram com Client ID /
Secret e Redirect URL
❖ São 4 tipos de “Authorization Grants”
para acesso às APIs com fluxos
diferentes
App
User
Client
Application
Resource
Server
Authorization
Server
Basic HTTP
App Token
OAuth2
OpenID Connect
Disponibilidade
Disponibilidade
❖ Monitorar o tráfego nas APIs
(preferencialmente com alertas)
❖ Identificar comportamento malicioso
❖ Limitar o uso dos Apps
❖ Plugar detecção de Fraude de
negócio
Disponibilidade
Powered by
Disponibilidade
Client Apps
APIs
Rate Limiting Policy
JSON Threat Policy
Payload Size Policy
IP Filtering Policy
…
API Gateway
Powered by
Payload Size: HTTP 413 - Payload is too large
& Rate Limit HTTP 429 - Too many requests
Privacidade
❖ Use sempre SSL/TLS
❖ Algumas situações podem requerer
criptografia adicional
Use algoritmos já comprovados (AES)
❖ Informações sensíveis devem ser
mascaradas (Número de cartão de
crédito, Tokens etc)
❖ Error Handling
Não exponha detalhes do backend (sem stacktrace)
Privacidade
https://api.cielo.com.br/order-management/
v1/orders
{
"number":"0992f1d5cee540d9a9648f4d6a9e4aa6",
"reference":"PEDIDO #1234",
"status":"DRAFT",
"items":[
{
"sku":"ede8f84a8b8645cb8e576a593c25c6ed",
"name":"produto 1"........
{
"transaction_type": "PAYMENT",
"status": "CONFIRMED",
"Terminal_number":"77102XXX",
....
Auditoria
Auditoria
❖ Armazenar os logs com as chamadas
realizadas (especialmente as críticas)
❖ Cuidados especiais:
❖ Os Logs podem crescer (e muito)
❖ Logs em arquivo nem sempre são fáceis de
inspecionar / buscar
❖ Dados sensíveis devem ser obfuscados
Auditoria
Powered by
Integridade
❖ Reduza a Superfície de Ataque
O que não pode ser acessado nem deve ser mostrado
❖ Prevenção de XML, JSON e SQL Injection
Filter Input, Escape Output
Integridade
❖ Utilize Chaves Opacas:
Integridade /pedidos/W3eRK09xW45Ful
/pedidos/9839920
https://api.cielo.com.br/order-management/v1/
orders
{
"number":"0992f1d5cee540d9a9648f4d6a9e4aa6",
"reference":"PEDIDO #1234",
"status":"DRAFT",
"items":[
{
https://api.cielo.com.br/order-management/v1/
orders/c393ce9f-3741-413f-8ad5-2f142eaed51f
https://api.cielo.com.br/order-management/v1/
orders/a9398720-9f78-4fa4-a5d4-ba54ba8009e7/i
tems/8484df74-eca6-4850-8e4c-35653af0bd3
....
Luis Moraes
luis.junior@cielo.com.br
+55 19 9 98118-8160
https://desenvolvedores.cielo.com.br
Obrigado!Rafael Rocha
rafael.rocha@sensedia.com
+55 19 9 9649-1506

Deck apix 2017 design & security - case cielo lio