docs(betrieb): Einrichtung Schritt fuer Schritt dokumentieren (#029)
Vier Anleitungen unter docs/betrieb/: Inbetriebnahme in der richtigen Reihenfolge, HTTPS mit nginx Proxy Manager sowie netbird als privates Netz, OIDC mit authentik samt Fehlerbildern, und Sicherung einschliesslich Zurueckspielen. Beim Aufschreiben zwei Fehler gefunden, die nur hinter einem Reverse Proxy auftreten: Die OIDC-Rueckkehradresse uebersah die im Dashboard eingetragene Adresse, und beim Einloesen des Codes wurde die interne Adresse verwendet - der Anbieter haette den Tausch abgelehnt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -26,7 +26,12 @@ export async function GET(request: Request) {
|
||||
}
|
||||
|
||||
try {
|
||||
const angaben = await anmeldungAbschliessen(einstellungen, new URL(request.url), pruefwert, zustand);
|
||||
// Hinter einem Reverse Proxy ist `request.url` die interne Adresse. Der Anbieter hat aber die
|
||||
// öffentliche als Rückkehradresse hinterlegt – mit der internen scheitert der Tausch des Codes.
|
||||
const angekommen = new URL(request.url);
|
||||
const oeffentlich = eigeneAdresse(request, `${angekommen.pathname}${angekommen.search}`, dashboardUrl);
|
||||
|
||||
const angaben = await anmeldungAbschliessen(einstellungen, oeffentlich, pruefwert, zustand);
|
||||
const benutzer = await mitOidcAnmelden(angaben.subject, angaben.email, angaben.name);
|
||||
|
||||
const { sitzungsdauerStunden } = await systemEinstellungen();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import * as client from "openid-client";
|
||||
import { einstellungen as systemEinstellungen } from "@/server/einstellungen";
|
||||
|
||||
/**
|
||||
* Anmeldung über OIDC (getestet mit authentik). Die Einrichtung erfolgt über Umgebungsvariablen,
|
||||
@@ -28,8 +29,13 @@ export function oidcEinstellungen(): OidcEinstellungen | null {
|
||||
};
|
||||
}
|
||||
|
||||
export function rueckkehrAdresse(): string {
|
||||
const basis = (process.env.APP_URL ?? "http://localhost:3000").replace(/\/$/, "");
|
||||
/**
|
||||
* Adresse, an die der Anbieter zurückschickt. Sie muss beim Anbieter **wortgleich** hinterlegt sein.
|
||||
* Vorrang hat die eingetragene Dashboard-Adresse, dann `APP_URL` (#029).
|
||||
*/
|
||||
export async function rueckkehrAdresse(): Promise<string> {
|
||||
const { dashboardUrl } = await systemEinstellungen();
|
||||
const basis = (dashboardUrl || process.env.APP_URL || "http://localhost:3000").replace(/\/$/, "");
|
||||
return `${basis}/api/auth/oidc/callback`;
|
||||
}
|
||||
|
||||
@@ -55,7 +61,7 @@ export async function anmeldungStarten(einstellungen: OidcEinstellungen): Promis
|
||||
const zustand = client.randomState();
|
||||
|
||||
const url = client.buildAuthorizationUrl(konfig, {
|
||||
redirect_uri: rueckkehrAdresse(),
|
||||
redirect_uri: await rueckkehrAdresse(),
|
||||
scope: "openid email profile",
|
||||
code_challenge: herausforderung,
|
||||
code_challenge_method: "S256",
|
||||
|
||||
Reference in New Issue
Block a user