fix(security): JWT-Audience gegen OIDC_CLIENT_ID prüfen
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>
This commit is contained in:
1 parent
b11294ec10
commit
c28475f71f
4 files changed
+92
-5
No files matched your search
@@ -0,0 +1,27 @@
|
||||
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/`,
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user