🔐 Autenticação - ecosif-angular

📋 Visão Geral

O ecosif-angular suporta dois métodos de autenticação:

  1. Login Local - Usuário/senha com JWT
  2. Azure AD - Autenticação via Microsoft Azure AD (MSAL)

🔑 Login Local

Fluxo

1. Usuário preenche credenciais
2. Frontend envia POST /api/auth/signin
3. Backend valida e retorna JWT token
4. Frontend armazena token
5. Interceptor adiciona token em requisições

Código

// Login
this.authService.login(username, password).subscribe(
  response => {
    // Token salvo automaticamente
    this.router.navigate(['/dashboard']);
  },
  error => {
    // Tratar erro
  }
);

☁️ Azure AD (MSAL)

Configuração

// helpers/msal-config.ts
export const MSALInstanceFactory = (): IPublicClientApplication => {
  return new PublicClientApplication({
    auth: {
      clientId: 'seu-client-id',
      authority: 'https://login.microsoftonline.com/seu-tenant-id'
    }
  });
};

Login

// Login via Azure AD
this.msalService.loginPopup().subscribe(
  response => {
    // Usuário autenticado
    this.router.navigate(['/dashboard']);
  }
);

🔒 Proteção de Rotas

AuthGuard

// guard/auth.guard.ts
canActivate(): boolean {
  if (this.authService.isAuthenticated()) {
    return true;
  }
  this.router.navigate(['/login']);
  return false;
}

Aplicar Guard

// app-routing.module.ts
{
  path: 'dashboard',
  component: DashboardComponent,
  canActivate: [AuthGuard]
}

🎫 Token JWT

Armazenamento

O token é armazenado em localStorage ou sessionStorage.

Interceptor

O AuthInterceptor adiciona automaticamente o token nas requisições:

// interceptor/auth.interceptor.ts
intercept(req: HttpRequest<any>, next: HttpHandler) {
  const token = this.tokenService.getToken();
  if (token) {
    req = req.clone({
      setHeaders: {
        Authorization: `Bearer ${token}`
      }
    });
  }
  return next.handle(req);
}

🔄 Renovação de Token

O sistema renova automaticamente tokens expirados quando possível.


Última Atualização: 2025-12-01