---
title: "Référence d'API — @nodefony/security — errors"
source: docs/api/security/errors.md
url: https://nodefony.github.io/nodefony-core/docs/api/security/errors/
---


[Documentation](../../../) › [Référence d'API](../../) › [`@nodefony/security`](../) › errors

> Générée depuis les déclarations de types publiées de `@nodefony/security` **10.0.0-beta.5** : exactement ce que reçoit une application qui l'installe. Cette page n'existe dans aucun dépôt — pour la corriger, on corrige le TSDoc du code.

## `@nodefony/security`

`import { … } from "@nodefony/security"` — 9 symboles.

### Classes (9)

#### `AccessDeniedError`

```ts
class AccessDeniedError extends nodefonyError
```

Accès refusé — `code = 403`. Levée par l'autorisation (un `@IsGranted` non satisfait, un voter DENY) : l'utilisateur EST authentifié mais n'a pas le droit. À distinguer d'`AuthenticationError` (401 = pas authentifié).

- `constructor(message?: string | Error)`

#### `ApiKeyError`

```ts
class ApiKeyError extends nodefonyError
```

Erreur de **gestion** d'une clé API (création/révocation) — porte un `code` HTTP que l'adaptateur framework mappe par duck-typing (il n'importe jamais les classes de `@nodefony/security`).

- `constructor(message: string, code: 400 | 403 | 409 | 503)`

#### `AuthenticationError`

```ts
class AuthenticationError extends nodefonyError
```

Échec d'authentification — `code = 401`. Levée par un `IAuthenticator` quand le credential est absent/invalide, ou par le firewall en Zero Trust (zone protégée + visiteur anonyme + route sans `@Anonymous`).

- `constructor(message?: string | Error)`

#### `CsrfError`

```ts
class CsrfError extends nodefonyError
```

Mutation cross-site bloquée — `code = 403` (RFC 9110 §15.5.4 : le serveur a compris la requête mais refuse de l'honorer).

- `constructor(message?: string | Error)`

#### `InsecureTransportError`

```ts
class InsecureTransportError extends nodefonyError
```

Secret refusé parce qu'il arrive en clair — `code = 403` (RFC 9110 §15.5.4 : le serveur a compris la requête mais refuse de l'honorer).

- `constructor()`

#### `InvalidTargetError`

```ts
class InvalidTargetError extends nodefonyError
```

La ressource demandée à l'émission ne peut pas être servie — `code = 400`, code d'erreur OAuth `invalid_target` (RFC 8707 §2).

- `readonly oauthError = "invalid_target"` — Code d'erreur OAuth à rendre au client (RFC 6749 §5.2 / RFC 8707 §2).
- `readonly requested?: string` — Ce que le client a demandé, tel qu'il l'a écrit — pour le journal.
- `constructor(description: string, requested?: string)`

#### `SsrfError`

```ts
class SsrfError extends nodefonyError
```

URL rejetée par la protection SSRF — `code = 422`. Levée quand une URL sortante (endpoint webhook, fetch applicatif…) est syntaxiquement valide mais cible une ressource **interdite** : protocole non autorisé, identifiants embarqués, hôte non résolvable, ou IP non publique (loopback, privée, link-local, métadonnées cloud `169.254.169.254`…). Sémantique alignée sur GitHub (422 à l'enregistrement d'un webhook invalide).

- `constructor(message?: string | Error)`

#### `ThrottledError`

```ts
class ThrottledError extends nodefonyError
```

Tentatives de login trop rapprochées — `code = 429` (RFC 6585 §4).

- `readonly retryAfterS: number` — Secondes restantes avant la prochaine tentative autorisée (header `Retry-After`).
- `constructor(retryAfterS: number)`

#### `UnverifiableTokenError`

```ts
class UnverifiableTokenError extends nodefonyError
```

Le jeton n'a pas pu être VÉRIFIÉ — `code = 503`, et surtout **pas 401**.

- `readonly detail?: string` — Cause technique, destinée au JOURNAL — jamais au client.
- `constructor(detail?: string)`

---

[← Toutes les références d'API](../../)
