Christophs zweiter GitHub-Account kam durch — der Ursprungsfund war echt. Die
vormittägliche Schliessung als "Phantom" war ein Fehlschluss (Google-Test
ungeprueft auf GitHub uebertragen) und ist hiermit zurueckgenommen.
Fix: login_method:github aus include raus, in require -> email AND github.
Gesetzt via PUT /accounts/{id}/access/policies/{policy_id} (der App-Pfad gibt
12130 fuer reusable Policies), zurueckgelesen ueber beide Endpunkte.
Sweep ueber alle Apps: login_method nur noch in Terpenfinder v3 — christoph
(github+onetimepin) und geli (nur onetimepin, harmlos). Scope geprueft: die
reusable Policy haengt nur an dieser einen App, kein Kollateral.
Drei neue Gotchas: 12130 (reusable nur unter /access/policies/{id}, der alte
Merkatz meinte das Detach, nicht das Aendern), MCP read-only (1010), 32-Hex-IDs.
Grenze dokumentiert: die Absicht war Kopplung an den GitHub-Username — den
Selector gibt es nicht. Identity-provider-group braucht SCIM (hier disabled,
scim/groups -> 500/12158). email AND github ist das vollstaendige Moegliche.
Aktenhistorie des Umwegs bleibt in allen drei Dateien stehen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4.0 KiB
Startauftrag — TP49: CF-Access login_method-Include ✅ ERLEDIGT (2026-10-06)
Abgeschlossen. Gitea #76, Prosa in
docs/teilprojekte.md→### TP49.🔴 Diese Datei nicht mehr als Auftrag lesen — der ist ausgeführt. Sie bleibt als Nachweis stehen: Lage, Vorgehen und die Fehlschläge auf dem Weg dorthin.
Der Auftrag (erledigt)
login_method:github aus dem include der Policy christoph der CF-Access-App
420.teilzeitladen.xyz entfernen — nach Rücksprache, wen der Zugang treffen soll.
Ausgeführt (2026-10-06)
github von include nach require verschoben ⇒ email AND github.
| vorher | jetzt | |
|---|---|---|
include |
email · github · onetimepin | email · onetimepin |
require |
— | github |
Gesetzt über PUT /accounts/{id}/access/policies/{policy_id}, zurückgelesen über beide
Endpunkte (App-Pfad + reusable-Pfad) — identisch. Der success:true der API wurde nicht
geglaubt, sondern die Policy neu gelesen.
App-ID e6a7991f-466c-4d1d-bac6-4b30fafccce4 · Policy (reusable) 8e44f5d1-8257-443e-a797-b3de939952ee
github-IdP 72c1291b… · onetimepin 9024c7a6…
Sweep über alle Apps (login_method in include/require/exclude): genau zwei Treffer, beide in
Terpenfinder v3 — christoph (github+onetimepin) und geli (nur onetimepin, harmlos).
Interne Apps/Wildcard: sauber (TP41).
🔴 Gotchas — live bestätigt, alle drei neu am 2026-10-06
- Reusable Policies ändern geht NICHT über den App-Pfad.
PUT …/access/apps/{app}/policies/{pol}→12130 can not update reusable policies through this endpoint. Korrekt:PUT …/access/policies/{policy_id}. ⚠️ Der ältere Merksatz „Reusable Policy nur per App-PUT detachbar" meint das Detach vom App-policies-Array — nicht das Ändern des Inhalts. Zwei verschiedene Operationen. - Der
cloudflare-MCP ist strikt read-only. Write-Probe: no-op-PUT (byte-identischer Body) →1010: undefined. Writes nur viaCF_API_TOKEN/curl (cd mcp/cloudflare && set -a; . ./.env; set +a). Token nie ausgeben. - Access-App-IDs sind 32 Hex — Kurzform
16aaec78→12045 invalid_application_id.
⚠️ Was login_method nicht kann
Die ursprüngliche Absicht war eine Kopplung an den GitHub-Username. Das gibt Access nicht her:
login_method prüft die Methode, nicht den Nutzer; einen Username-Selector gibt es nicht.
Der einzige GitHub-bezogene Identitäts-Selector ist „Identity provider group" — der braucht
SCIM, und am hiesigen GitHub-IdP ist scim_config.enabled = false
(GET …/scim/groups → 500 (12158)). Weg zu.
⇒ email AND github ist die vollständige Umsetzung des hier Möglichen, keine Notlösung.
Eine echte Org-Kopplung bräuchte SCIM aktiviert — eigener TP.
Aktenhistorie — der Umweg (nicht löschen)
Zwischenzeitlich wurde TP49 als Phantom geschlossen — auf Basis eines Google-Tests plus eines Schlusses auf GitHub. Beides falsch:
- Lese-Schluss als Befund verkauft. „
includeist ein OR" + „Google bindet die Adresse" ⇒ „GitHub bindet auch". Nie gemessen, aber als Tatsache in Akte und Issue geschrieben. - Der Gegenbeweis war keiner. Der Google-Test zeigt nur Googles Verhalten. Die IdP-Configs sind konfigurationsgleich — das unterscheidende Feld steht nicht in der Config.
Christoph hat mit einem zweiten GitHub-Account getestet: er kam durch. Damit war der Ursprungsfund bestätigt und der Fix nötig.
Lehre: pro IdP einzeln messen, nicht den ersten Test auf den zweiten übertragen.
Verifikation
- Policy über beide Endpunkte zurückgelesen —
requireträgt github,includenicht mehr - Sweep: keine weiteren
login_methodinincludeaußer den bekannten - Scope: reusable Policy nur an diese eine App gebunden (kein Kollateral)
- Offen: Bestätigungstest, dass ein fremder GitHub-Account jetzt abgewiesen wird