fix(oidc): klare Meldung bei einem OIDC_ISSUER ohne Schema
OIDC_ISSUER=PocketID (der Name statt der Adresse) endete in unsupported protocol scheme "" – tief aus der Bibliothek, ohne Hinweis auf die Ursache. Und weil ein Fehlschlag hier den Start abbricht, stand die ganze Cloud wegen einer Zeile in der .env. Jetzt wird vorher geprueft und die Zeile beim Namen genannt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ebff565367
commit
617c665a2e
3 files changed
+17
-4
No files matched your search
+3
-2
@@ -44,8 +44,9 @@ ADMIN_USERNAME=admin
|
|||||||
ADMIN_PASSWORD=
|
ADMIN_PASSWORD=
|
||||||
|
|
||||||
# ── Anmeldung über einen Identitätsanbieter (optional) ───────────────────────
|
# ── Anmeldung über einen Identitätsanbieter (optional) ───────────────────────
|
||||||
# Leerer OIDC_ISSUER = aus.
|
# Leerer OIDC_ISSUER = aus. Sonst die vollständige Adresse des Anbieters –
|
||||||
OIDC_ISSUER=
|
# nicht seinen Namen. Falsch gesetzt bricht der Start ab.
|
||||||
|
OIDC_ISSUER= # z. B. https://id.example.com
|
||||||
OIDC_CLIENT_ID=aether
|
OIDC_CLIENT_ID=aether
|
||||||
OIDC_CLIENT_SECRET=
|
OIDC_CLIENT_SECRET=
|
||||||
# Muss exakt <PUBLIC_URL>/api/v1/auth/oidc/callback sein.
|
# Muss exakt <PUBLIC_URL>/api/v1/auth/oidc/callback sein.
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
gooidc "github.com/coreos/go-oidc/v3/oidc"
|
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 == "" {
|
if cfg.Issuer == "" {
|
||||||
return nil, nil
|
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)
|
provider, err := gooidc.NewProvider(ctx, cfg.Issuer)
|
||||||
if err != nil {
|
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{
|
oauthCfg := &oauth2.Config{
|
||||||
ClientID: cfg.ClientID,
|
ClientID: cfg.ClientID,
|
||||||
|
|||||||
+1
-1
@@ -50,7 +50,7 @@ ADMIN_PASSWORD=changeme_strong_admin_password
|
|||||||
# ── OIDC (optional) ───────────────────────────────────────────────────────────
|
# ── OIDC (optional) ───────────────────────────────────────────────────────────
|
||||||
# Leerer OIDC_ISSUER = aus. OIDC_REDIRECT_URL muss exakt
|
# Leerer OIDC_ISSUER = aus. OIDC_REDIRECT_URL muss exakt
|
||||||
# <PUBLIC_URL>/api/v1/auth/oidc/callback sein und beim Anbieter eingetragen.
|
# <PUBLIC_URL>/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_ID=aether
|
||||||
# OIDC_CLIENT_SECRET=
|
# OIDC_CLIENT_SECRET=
|
||||||
# OIDC_REDIRECT_URL=https://cloud.example.com/api/v1/auth/oidc/callback
|
# OIDC_REDIRECT_URL=https://cloud.example.com/api/v1/auth/oidc/callback
|
||||||
|
|||||||
Reference in new issue
Block a user