Zum Inhalt springen
ecdsa.com
express-jwt (Node.js)JWT-Bibliotheken

Fehlermeldung

UnauthorizedError: No authorization token was found

Auch ausgegeben als

  • No authorization token was found
  • Format is Authorization: Bearer [token]

Bleibt der Fehler unbehandelt, gibt Express ihn samt Stack aus, beginnend mit „UnauthorizedError: No authorization token was found“. `err.code` unterscheidet `credentials_required` (kein Token) von `credentials_bad_scheme` und `credentials_bad_format` („Format is Authorization: Bearer [token]“).

express-jwt (Node.js) — UnauthorizedError, code credentials_required

Was der Fehler bedeutet

express-jwt schützt die Route, hat aber kein Token gefunden: Die Anfrage hat keinen Header `Authorization`, und keine eigene Funktion `getToken` hat eines geliefert. Weil `credentialsRequired` standardmäßig `true` ist, wirft die Middleware `UnauthorizedError` mit `code: "credentials_required"` und `status: 401`, und die Anfrage erreicht deinen Handler nie. Ist ein Header vorhanden, hat aber nicht die Form `Bearer <token>`, scheitert sie stattdessen mit „Format is Authorization: Bearer [token]“.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    express-jwt mitteilen, wo das Token steckt

    `getToken` erhält die Anfrage und gibt den Token-String oder `null` zurück. Halte die Funktion einfach und akzeptiere Tokens nicht aus mehreren Quellen gleichzeitig.

    js
    import cookieParser from "cookie-parser";
    import { expressjwt } from "express-jwt";
    
    app.use(cookieParser());
    app.use(
      expressjwt({
        secret: getSigningKey,          // e.g. jwks-rsa's expressJwtSecret(...)
        algorithms: ["RS256"],
        getToken: (req) => req.cookies.access_token ?? null,
      }),
    );
  2. 2.

    Öffentliche Routen ausnehmen oder Authentifizierung optional machen

    `.unless()` überspringt die aufgeführten Pfade. `credentialsRequired: false` lässt Anfragen ohne Token ohne `req.auth` durch, sodass jede Route selbst entscheiden kann.

    js
    app.use(
      expressjwt({ secret, algorithms: ["HS256"] }).unless({ path: ["/health", "/login", /^\/public\//] }),
    );
    
    // Or keep authentication optional and decide per route:
    app.use(expressjwt({ secret, algorithms: ["HS256"], credentialsRequired: false }));
  3. 3.

    Fehler in eine korrekte 401-Antwort umwandeln

    Der Standard-Handler von Express übernimmt den `status` des Fehlers (401), antwortet aber mit einer HTML-Seite – in der Entwicklung samt Stacktrace – und ohne Header `WWW-Authenticate`. Bilde `UnauthorizedError` selbst auf eine JSON-Antwort mit Status 401 und diesem Header ab.

    js
    app.use((err, req, res, next) => {
      if (err.name === "UnauthorizedError") {
        return res.status(401).set("WWW-Authenticate", "Bearer").json({ error: err.code });
      }
      next(err);
    });

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen