Aplicação web para geração do Authorization Code do fluxo OAuth2 do Olist Tiny v3.
Esta aplicação é uma ponte OAuth2 que simplifica o primeiro passo do fluxo de autenticação do Olist Tiny v3: a obtenção do authorization code.
Em vez de construir manualmente a URL de autorização, abrir o navegador, autenticar e copiar o code da URL de retorno, você informa o client_id em um formulário, autentica-se no Tiny e recebe o código pronto para copiar e usar.
A URL completa do fluxo OIDC é montada automaticamente pela aplicação com os parâmetros exigidos pelo Tiny (client_id, redirect_uri, scope=openid, response_type=code, state anti-CSRF).
Aviso importante: este portal serve apenas para gerar o código de autorização do Olist Tiny v3. A troca do código pelo
access_token/refresh_tokené feita diretamente pelo seu backend contra o endpoint de token do Tiny, conforme documentado em api-docs.erp.olist.com.
A aplicação está publicada em:
https://olist-tiny-code-auth.vercel.app//
Abra o link, informe o client_id registrado no seu app do Olist Tiny, autentique-se e o authorization code será exibido na tela.
Nenhum dado é gravado. A aplicação é 100% serverless e não possui banco de dados, cache persistente ou armazenamento local.
- O
client_idinformado no formulário é usado apenas para montar a URL de redirecionamento e descartado em seguida. - O
authorization coderetornado pelo Tiny é exibido na página e não é armazenado. - O
stateanti-CSRF é gerado por request e descartado após o redirect. - Toda a execução acontece em funções serverless do Vercel, sem estado entre requisições.
| Camada | Tecnologia |
|---|---|
| Linguagem | Python 3.9+ |
| Framework web | Flask 3.0.3 |
| Encoding URL | urllib.parse.urlencode (stdlib) |
| Tokens CSRF | secrets.token_urlsafe (stdlib, CSPRNG) |
| Testes | pytest 8.2.0 |
| Deploy | Vercel (@vercel/python) |
| Templates | Jinja2 (nativo do Flask) |
Sem dependências externas em runtime além do Flask. Sem SDKs proprietários.
- Acesse https://olist-tiny-code-auth.vercel.app//.
- No campo Client ID, cole o
client_iddo seu aplicativo registrado no Olist Tiny. - Clique em Gerar Código de Autorização.
- Faça login no Tiny e autorize o acesso.
- Copie o
authorization codeexibido na página de retorno. - Use o código em uma requisição
POSTpara o endpoint de token do Tiny:
curl -X POST https://accounts.tiny.com.br/realms/tiny/protocol/openid-connect/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "client_id=SEU_CLIENT_ID" \
-d "client_secret=SEU_CLIENT_SECRET" \
-d "code=AUTHORIZATION_CODE_RECEBIDO" \
-d "redirect_uri=https://olist-tiny-code-auth.vercel.app/callback"Pré-requisitos: Python 3.9 ou superior.
git clone <repositorio>
cd olist-tiny-code-auth
pip install -r requirements.txt
python app.pyA aplicação iniciará em http://localhost:5000. Use http://localhost:5000/callback como redirect_uri ao testar localmente.
Para que o Tiny aceite o redirect de volta para esta aplicação, você precisa registrar a URL de Redirecionamento no cadastro do seu aplicativo.
- Acesse o painel do desenvolvedor do Olist Tiny.
- Abra o cadastro do seu aplicativo (ou crie um novo).
- No campo URL de Redirecionamento (Redirect URI), informe:
https://olist-tiny-code-auth.vercel.app//callback
Em ambiente de desenvolvimento local, use
http://localhost:5000/callback. A URL deve ser exata — incluindo o caminho/callbacke o esquema (httpvshttps).
- Salve o cadastro. O
client_ide oclient_secretserão gerados (ou exibidos) pelo painel. - Use o
client_idno formulário desta aplicação para iniciar o fluxo.
Mais detalhes: Documentação oficial de autenticação Olist Tiny.
olist-tiny-code-auth/
├── app.py # Objeto Flask, rotas e build_auth_url
├── index.py # Entrypoint do Vercel (importa app)
├── requirements.txt # Dependências de runtime e teste
├── vercel.json # Build e roteamento do Vercel
├── test_app.py # 12 testes pytest
├── LICENSE # MIT
├── README.md # Este arquivo
├── static/
│ └── Logotipo.png # Logotipo da CTEC
├── templates/
│ ├── index.html # Landing page com formulário de client_id
│ └── callback.html # Exibição do authorization code
└── docs/
├── README.md # Índice da documentação
├── uso.md # Passo a passo detalhado
├── api.md # Referência das rotas HTTP
├── arquitetura.md # Fluxo OAuth2 e decisões de design
└── deploy.md # Configuração de deploy
| Arquivo | Responsabilidade |
|---|---|
app.py |
Define o objeto app Flask, as 3 rotas e a função build_auth_url |
index.py |
Entrypoint do Vercel — apenas importa app e chama app.run() |
templates/index.html |
Landing page com o formulário onde o usuário informa o client_id |
templates/callback.html |
Página que exibe o code retornado pelo Tiny com botão de copiar |
static/Logotipo.png |
Logotipo da CTEC exibido no cabeçalho e no rodapé |
test_app.py |
Suíte pytest cobrindo rotas, erros e encoding da URL |
vercel.json |
Configura o builder Python e o roteamento de qualquer URL para o app |
| Método | Rota | Descrição |
|---|---|---|
| GET | / |
Formulário para informar o client_id |
| POST | /authorize |
Redireciona para a URL de autenticação do Tiny |
| GET | /callback |
Recebe e exibe o authorization code retornado pelo Tiny |
Referência completa (parâmetros, respostas, exemplos curl): docs/api.md.
- docs/README.md — índice da documentação
- docs/uso.md — passo a passo detalhado de uso
- docs/api.md — referência das rotas e da função
build_auth_url - docs/arquitetura.md — fluxo OAuth2 e decisões de design
- docs/deploy.md — deploy no Vercel
| Variável | Obrigatória | Descrição | Padrão |
|---|---|---|---|
FLASK_SECRET_KEY |
Não | Chave secreta para app.secret_key do Flask |
Gerada aleatoriamente |
Como o app não utiliza
flask.session, a chave secreta é definida apenas por conformidade com o Flask. Em modo dev, o valor gerado por request é suficiente. Em produção, definirFLASK_SECRET_KEYno painel do Vercel (Settings → Environment Variables) garante comportamento consistente entre deploys.
python -m pytest test_app.py -v12 testes cobrindo:
- Renderização do formulário
- Validação de
client_idausente/vazio - Redirecionamento correto com todos os parâmetros OAuth2
- Tratamento de erro no callback (
error,error_description) - Encoding correto de parâmetros com caracteres especiais em
build_auth_url
Este projeto está licenciado sob a MIT License — veja LICENSE.
- Demo ao vivo
- Documentação de autenticação Olist Tiny
- OAuth 2.0 Authorization Framework (RFC 6749)
- OpenID Connect Core 1.0
- Flask — Documentação oficial
- Vercel Python Runtime
Imagem gerada por IA, compartilhada em grupos de WhatsApp, com uso autorizado por seus criadores.
