diff --git a/.env.example b/.env.example index 1fdf050..f203d13 100644 --- a/.env.example +++ b/.env.example @@ -44,8 +44,9 @@ ADMIN_USERNAME=admin ADMIN_PASSWORD= # ── Anmeldung über einen Identitätsanbieter (optional) ─────────────────────── -# Leerer OIDC_ISSUER = aus. -OIDC_ISSUER= +# Leerer OIDC_ISSUER = aus. Sonst die vollständige Adresse des Anbieters – +# nicht seinen Namen. Falsch gesetzt bricht der Start ab. +OIDC_ISSUER= # z. B. https://id.example.com OIDC_CLIENT_ID=aether OIDC_CLIENT_SECRET= # Muss exakt /api/v1/auth/oidc/callback sein. diff --git a/backend/internal/oidc/handler.go b/backend/internal/oidc/handler.go index 429bff3..72c826b 100644 --- a/backend/internal/oidc/handler.go +++ b/backend/internal/oidc/handler.go @@ -7,6 +7,7 @@ import ( "encoding/json" "fmt" "net/http" + "net/url" "strings" gooidc "github.com/coreos/go-oidc/v3/oidc" @@ -46,9 +47,20 @@ func New(ctx context.Context, cfg Config, authStore *auth.Store, sessions *auth. if cfg.Issuer == "" { return nil, nil } + // Erst prüfen, ob überhaupt eine Adresse dasteht. Sonst hängt der Fehler + // tief in der Bibliothek: `unsupported protocol scheme ""` sagt nicht, + // dass jemand den *Namen* des Anbieters eingetragen hat statt seiner URL. + // Und weil ein Fehlschlag hier den Start abbricht, steht die ganze Cloud + // wegen einer Zeile in der .env – dann soll die Zeile wenigstens genannt + // werden. (Gemessen mit OIDC_ISSUER=PocketID.) + if u, uerr := url.Parse(cfg.Issuer); uerr != nil || u.Scheme == "" || u.Host == "" { + return nil, fmt.Errorf( + "OIDC_ISSUER muss die vollstaendige Adresse des Anbieters sein, "+ + "z. B. https://id.example.com – gefunden: %q", cfg.Issuer) + } provider, err := gooidc.NewProvider(ctx, cfg.Issuer) if err != nil { - return nil, fmt.Errorf("oidc provider: %w", err) + return nil, fmt.Errorf("oidc provider %q nicht erreichbar: %w", cfg.Issuer, err) } oauthCfg := &oauth2.Config{ ClientID: cfg.ClientID, diff --git a/deploy/.env.example b/deploy/.env.example index c29d219..1c81c32 100644 --- a/deploy/.env.example +++ b/deploy/.env.example @@ -50,7 +50,7 @@ ADMIN_PASSWORD=changeme_strong_admin_password # ── OIDC (optional) ─────────────────────────────────────────────────────────── # Leerer OIDC_ISSUER = aus. OIDC_REDIRECT_URL muss exakt # /api/v1/auth/oidc/callback sein und beim Anbieter eingetragen. -# OIDC_ISSUER=https://your-idp.example.com +# OIDC_ISSUER=https://your-idp.example.com # Adresse, nicht der Name # OIDC_CLIENT_ID=aether # OIDC_CLIENT_SECRET= # OIDC_REDIRECT_URL=https://cloud.example.com/api/v1/auth/oidc/callback