Pular para o conteúdo principal
Versão: Em desenvolvimento — v0.2.3

Autenticação e autorização

Rotas com prefixo restserver.AuthenticatedApi exigem um AuthenticationContext válido.

Comportamento padrão

O middleware padrão lê:

HeaderCampo
X-Tenant-IdTenantID
X-User-IdUserID

Os dois valores precisam estar preenchidos. Caso contrário, a rota responde 401.

auth := ctx.AuthenticationContext()
if auth == nil || !auth.Valid() {
ctx.ErrorResponse(http.StatusUnauthorized, errors.New("unauthenticated"))
return
}

O mesmo valor está disponível no contexto Go:

auth := security.GetAuthenticationContext(ctx.Context())
tenantID := auth.GetTenantID()
userID := auth.GetUserID()

Criar e propagar contexto

Fora de um handler:

auth := security.NewAuthenticationContext("tenant-123", "user-456")
ctx = auth.SetInContext(ctx)

Propague o contexto para banco, mensageria e clientes.

Autenticação personalizada

Implemente a validação de token ou sessão:

type bearerAuthentication struct{}

func (bearerAuthentication) Apply(
ctx restserver.WebContext,
) (*security.AuthenticationContext, error) {
token := first(ctx.RequestHeader("Authorization"))
claims, err := validateToken(token)
if err != nil {
return nil, err
}

return security.NewAuthenticationContext(
claims.TenantID,
claims.UserID,
), nil
}

Registre antes de iniciar o servidor:

restserver.CustomAuthMiddleware(bearerAuthentication{})

Autorização

O SDK fornece o contexto de identidade, mas regras de perfil e permissão pertencem à aplicação. Valide a autorização antes de executar uma operação sensível e filtre dados por TenantID em aplicações multi-tenant.

aviso

Os headers padrão são adequados apenas quando uma camada confiável anterior autentica a requisição e remove headers fornecidos pelo cliente. Em uma API exposta diretamente, use autenticação personalizada.