Medeiros Corporation Inc.

Artigo

Estrutura de Autenticação Segura

Estrutura de Autenticação Segura

Fabrício de Medeiros

🛡️ Estrutura de Autenticação Segura

Serviços Separados para Web e API

Documento Técnico - Arquitetura MVC PHP 8.2+

📘 Visão Geral

Este documento tem como objetivo padronizar, documentar e orientar a implementação dos serviços de autenticação utilizados no projeto, respeitando o padrão arquitetural MVC, com divisão clara entre autenticação para interface Web (baseada em sessões) e autenticação para API (baseada em JWT).

Optamos por separar os serviços de autenticação para garantir clareza, modularidade e facilidade de manutenção, evitando mistura de responsabilidades.

🗂️ Estrutura de Arquivos

App/
├── src/
│   ├── Controller/
│   │   ├── AuthController.php         # Requisições de login Web
│   │   └── AuthApiController.php      # Requisições da API (JSON)
│   ├── Service/
│   │   ├── AuthService.php            # Autenticação Web (sessões)
│   │   └── AuthApiService.php         # Autenticação API (JWT)
│   └── Model/
│       └── User.php                   # Representa o usuário, contém getByEmail()

📦 Descrição dos Componentes

🔹 AuthService.php (Autenticação Web)

namespace App\Service;

class AuthService
{
    public function login(string $email, string $password): bool;
    public function logout(): void;
    public function isAuthenticated(): bool;
    private function verifyPassword(string $hash, string $plain): bool;
}

Função: Realiza login tradicional com sessões, ideal para navegadores.

🔹 AuthApiService.php (Autenticação API)

namespace App\Service;

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

class AuthApiService
{
    public function login(string $email, string $password): ?string;
    public function verifyToken(string $token): ?array;
    private function generateToken(array $payload): string;
    private function verifyPassword(string $hash, string $plain): bool;
}

Função: Autentica via JWT, retornando token para requisições protegidas da API.

🔄 Diferença de Fluxos

Item Web (AuthService) API (AuthApiService)
Armazenamento Sessão ($_SESSION) Token JWT
Persistência Servidor Cliente (Header: Authorization)
Resposta Redirecionamento JSON com status e token
Logout session_destroy() Remoção do token no client

✅ Boas Práticas de Nomenclatura

🔐 Segurança Adicional

🧪 Exemplo de uso em AuthApiController.php

namespace App\Controller;

use App\Service\AuthApiService;

class AuthApiController
{
    public function login(): void
    {
        $data = json_decode(file_get_contents('php://input'), true);

        $authService = new AuthApiService();
        $token = $authService->login($data['email'], $data['password']);

        if (!$token) {
            http_response_code(401);
            echo json_encode(['error' => 'Credenciais inválidas']);
            return;
        }

        echo json_encode(['token' => $token]);
    }
}

🧭 Caminhos para evolução futura

📚 Referências e Fontes


Explore, Contribua e Cresça Conosco!

Obrigado por ler o nosso artigo! Esperamos que você tenha encontrado informações valiosas e inspiradoras. Se você está empolgado para saber mais, temos uma vasta coleção de artigos sobre tópicos variados, desde tendências tecnológicas até insights sobre desenvolvimento de software. Não deixe de explorar nossas outras publicações!

Quer fazer parte da nossa comunidade?

Inscreva-se no nosso site para receber as últimas atualizações e novidades diretamente no seu e-mail. Seu cadastro é o primeiro passo para se conectar com uma rede de entusiastas e profissionais apaixonados pelo que fazem.

Tem algo a compartilhar?

Adoraríamos ouvir suas ideias, inovações e experiências! Sinta-se à vontade para escrever e enviar seus próprios artigos, códigos ou projetos. Sua contribuição é fundamental para enriquecer nosso conteúdo e ajudar outros leitores a crescer junto com você. Juntos, podemos criar um espaço de aprendizado e troca de conhecimento enriquecedor. Seu conhecimento e entusiasmo são o que fazem nossa comunidade especial.

Inscreva-se Agora | Compartilhe | Contribua com um Artigo
Continue explorando e seja parte da transformação!

Voltar