Appearance
Estrutura da Autenticação com o Bling
Esta seção descreve o fluxo de autenticação e o gerenciamento de tokens utilizado na integração com o Bling.
Visão Geral
A autenticação com o Bling utiliza o protocolo OAuth 2.0, permitindo ao sistema obter e renovar automaticamente os tokens de acesso necessários para realizar requisições à API.
O fluxo é composto por duas etapas principais:
- Autorização inicial: o usuário concede acesso ao sistema via redirecionamento e callback.
- Renovação automática: o sistema mantém o
access_tokenatualizado usando orefresh_tokensalvo.
Componentes Principais da Implementação
app/Integrations/Bling/BlingAPI.phpClasse central da integração. Gerencia as requisições HTTP autenticadas, controla orate limite contém o métodorefreshToken()para renovar oaccess_tokenusando orefresh_tokenarmazenado.app/Http/Controllers/BlingController.phpControla o fluxo OAuth 2.0:- Redireciona o usuário para a página de autorização do Bling.
- Recebe o callback com o
codede autorização. - Usa a
BlingAPIpara trocar o código poraccess_tokenerefresh_token. - Armazena os tokens no banco via
Setting::setValue().
app/Console/Commands/BlingRefreshTokenCommand.phpComando Artisan responsável por renovar o token periodicamente. É agendado via cron, garantindo que o sistema mantenha o acesso contínuo à API sem necessidade de reautenticação manual.app/Enums/SettingKeys.phpEnum que define as chaves usadas para armazenar os tokens e outras configurações relacionadas ao Bling.
Relação entre os Componentes
| Componente | Responsabilidade |
|---|---|
BlingController | Executa o fluxo OAuth 2.0 (autorização e callback). |
BlingAPI | Gerencia o token atual e executa a renovação. |
Setting | Persiste os tokens de acesso e atualização. |
SettingKeys | Centraliza as chaves de configuração. |
BlingRefreshTokenCommand | Automatiza a renovação do access_token. |
Fluxo de Autenticação
- O usuário inicia o processo de autorização pelo painel administrativo.
- O
BlingControllerredireciona o usuário para a página de autorização do Bling. - O Bling redireciona de volta para o sistema com o
codede autorização. - O
BlingControllerutiliza aBlingAPIpara trocar ocodeporaccess_tokenerefresh_token. - Os tokens são armazenados via
Setting::setValue()utilizando as chaves deSettingKeys. - A
BlingAPIinclui oaccess_tokenem todas as requisições autenticadas. - Quando o token expira, o comando
app:bling-refresh-tokenrenova o acesso automaticamente.
Armazenamento dos Tokens
Variáveis de ambiente (
.env):BLING_CLIENT_IDBLING_CLIENT_SECRETBLING_REDIRECT_URI
Banco de dados (
settingstable):bling_access_token(SettingKeys::BLING_ACCESS_TOKEN)bling_refresh_token(SettingKeys::BLING_REFRESH_TOKEN)bling_token_expires_at
Essas informações permitem que o sistema mantenha o estado de autenticação sem necessidade de repetição do fluxo inicial.
Segurança e Logs
- As credenciais de cliente (
CLIENT_ID,CLIENT_SECRET) nunca são registradas em logs. - O sistema usa
Http::withBasicAuth()apenas durante a primeira troca de código por tokens. - Operações sensíveis são registradas em
storage/logs/bling.log, com dados sigilosos mascarados. - O
RateLimiter(Illuminate\Support\Facades\RateLimiter) limita as chamadas à API para evitar bloqueios.