OIDC mit Discovery, PKCE, state und nonce; lokaler Login mit argon2 als Notfallzugang; Rechte in einer Tabelle, Prüfung ausschließlich serverseitig, Rolle und Aktiv-Status pro Anfrage aus der Datenbank. Ein unabhängiger Review fand eine offene Weiterleitung: die Präfix-Prüfung des Rücksprungziels ließ /<TAB>/fremd.example durch, woraus der Browser //fremd.example macht. Das Ziel wird jetzt aufgelöst und die Herkunft verglichen. Dazu acht weitere Befunde, alle behoben. 274 Tests. Closes #7 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
24 lines
873 B
TypeScript
24 lines
873 B
TypeScript
/**
|
||
* Adressen der Anwendung nach aussen (#007).
|
||
*
|
||
* Massgeblich ist APP_URL, nicht die eingehende Anfrage. Hinter einem Reverse
|
||
* Proxy traegt die Anfrage den internen Host und oft auch das falsche Schema –
|
||
* eine daraus gebaute Umleitung schickt den Benutzer dann an eine Adresse, die
|
||
* er gar nicht erreicht, und eine daraus gebaute OIDC-Rueckruf-Adresse passt
|
||
* nicht zu der beim Anbieter hinterlegten.
|
||
*
|
||
* Die Herkunft der Anfrage dient nur als Notnagel, damit die Anwendung auch ohne
|
||
* gesetzte APP_URL nicht stehen bleibt.
|
||
*/
|
||
export function oeffentlicheAdresse(pfad: string, ersatzHerkunft: string): URL {
|
||
const basis = process.env["APP_URL"]?.trim();
|
||
if (basis) {
|
||
try {
|
||
return new URL(pfad, basis);
|
||
} catch {
|
||
// Eine unbrauchbare APP_URL soll die Anmeldung nicht blockieren.
|
||
}
|
||
}
|
||
return new URL(pfad, ersatzHerkunft);
|
||
}
|