File Storage 1.1.15
v1.1.15 - OAuth2 PKCE Authentication & Microservices Architecture
🔐 Autenticação OAuth2 com PKCE
Migração completa para autenticação OAuth2 com PKCE (Proof Key for Code Exchange), oferecendo segurança significativamente melhorada.
Destaques:
- ✅ Geração segura de code_challenge/code_verifier
- ✅ Tokens armazenados em localStorage
- ✅ Refresh token automático na expiração
- ✅ Deep link support para Electron:
ocs-auth://callback
🏗️ Arquitetura de Microserviços
Separação de URLs para melhor isolamento e segurança:
📍 Autenticação: http://localhost:3000
📍 Aplicação: http://localhost:12000
📍 Encurtador: http://localhost:4000
👤 Novo Sistema de Permissões
- Estrutura de usuário:
{ userId, roles[], clientId } - Permissões baseadas em array de roles
- Suporte para múltiplas roles por usuário
- Exemplo:
user.roles.includes('admin')
🔄 Melhorias de Fluxo
Autenticação Automática
- Interceptor detecta
401 Unauthorized - Refresh token automático
- Retry automático de requisição com novo token
Validação Obrigatória
- Endpoints de storage agora exigem autenticação
- Falha explícita se token não estiver presente
- Evita downgrades silenciosos de permissões
🔌 WebSocket Sincronizado
- Socket events agora usam UUID do JWT (
userId) - Sincronização perfeita com autenticação
📋 Checklist de Integração
Para integrar com esta versão:
- Configurar servidor OAuth2 em porta 3000
- Configurar servidor de aplicação em porta 12000
- Registrar deep link
ocs-auth://callbackno OAuth client - Atualizar
.envcomVITE_AUTH_ENDPOINT - Testar login e refresh token flow
⚠️ Breaking Changes
| Antes | Depois |
|---|---|
user.id (number) | user.userId (string UUID) |
user.role | user.roles[] |
| Tokens em cookies | Tokens em localStorage |
| Sem autenticação obrigatória | Autenticação exigida em endpoints |
🔧 Arquivos Principais Alterados
src/renderer/src/services/api.ts- PKCE + refresh token logicsrc/renderer/src/contexts/auth.tsx- Auth context atualizadosrc/renderer/src/services/socket.ts- WebSocket com userIdsrc/renderer/src/pages/storage/index.tsx- Roles-based permissionssrc/renderer/src/services/shorten/api.ts- localStorage tokens
🚀 Como Usar
Login
const user = await apiService.login({ email, password });
// Automático: tokens armazenados, refresh configuradoRequisições Autenticadas
const folders = await apiService.getFolders();
// Automático: header Authorization: Bearer ${token}Verificação de Permissão
if (user?.roles?.includes('admin')) {
// Mostrar opções admin
}v1.1.15 - Lançado em 16 de Fevereiro de 2026