Bisher prüfte das Backend nur Issuer und Signatur. Ein Access-Token, das derselbe Authentik-Provider für eine andere Anwendung ausgestellt hat, wurde ebenfalls akzeptiert. - JwtStrategy verlangt aud == OIDC_CLIENT_ID (jwt-optionen.ts, getestet mit echten RS256-Tokens). Ohne OIDC_CLIENT_ID bleibt die Prüfung aus, mit Warnung beim Start. - docker-compose.yml übergibt OIDC_CLIENT_ID jetzt ans Backend, Standard: dieselbe Client-ID wie das Frontend (VITE_OIDC_CLIENT_ID). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 lines
795 B
TypeScript
28 lines
795 B
TypeScript
import type { Algorithm } from 'jsonwebtoken';
|
||
|
||
export interface JwtPruefOptionen {
|
||
issuer: string;
|
||
/** Client-ID dieser Anwendung; ohne sie wird `aud` nicht geprüft. */
|
||
audience?: string;
|
||
algorithms: Algorithm[];
|
||
jwksUri: string;
|
||
}
|
||
|
||
/**
|
||
* Prüfoptionen für Access-Tokens von Authentik. Ohne Audience-Prüfung würde
|
||
* jedes Token desselben Issuers akzeptiert – also auch eines, das Authentik
|
||
* für eine andere Anwendung mit demselben Provider ausgestellt hat.
|
||
*/
|
||
export function jwtPruefOptionen(
|
||
issuer: string,
|
||
clientId: string | undefined,
|
||
): JwtPruefOptionen {
|
||
const basis = issuer.endsWith('/') ? issuer.slice(0, -1) : issuer;
|
||
return {
|
||
issuer,
|
||
...(clientId ? { audience: clientId } : {}),
|
||
algorithms: ['RS256'],
|
||
jwksUri: `${basis}/jwks/`,
|
||
};
|
||
}
|