From dbf176ac97036f9899183a6655c5f4e7f8161215 Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Sun, 17 May 2026 00:06:21 +0200 Subject: [PATCH] fixed admin consent msft --- c-work/_CHANGELOG.md | 4 ++++ .../microsoft-entra-registration-checklist.md | 19 ++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/c-work/_CHANGELOG.md b/c-work/_CHANGELOG.md index a8b449f..3c1d946 100644 --- a/c-work/_CHANGELOG.md +++ b/c-work/_CHANGELOG.md @@ -12,6 +12,10 @@ type: `feat` `fix` `refactor` `docs` `test` `chore` `build` · scope: `gateway Skip: reine Refactors, Formatting, Lint, Dep-Bumps, Test-only, Wiki-Tippfehler. +## 2026-05-16 + +- 2026-05-16 | fix | frontend-nyla | `AddConnectionWizard` Admin-Consent-Button war NoOp: `ConnectionsPage` hat das `onMsftAdminConsent`-Prop nie übergeben, der `?.()`-Aufruf im Wizard wurde schweigend übersprungen und der Wizard sprang einfach zum nächsten Schritt. Im Backend kam kein einziger Request an `/api/msft/adminconsent` an — User aus Multi-Tenants, in denen die App-Registration noch nie admin-consented wurde, hingen unauflöslich im "Anforderung gesendet"-Screen fest. Fix: `ConnectionsPage._handleMsftAdminConsent` öffnet jetzt ein Popup auf `/api/msft/adminconsent`, und das Prop wird an den Wizard durchgereicht. Doc-Sync: `d-guides/microsoft-entra-registration-checklist.md` (Redirect-URI-Tabelle um `/api/msft/adminconsent/callback` ergänzt — Fehlen führte zu `AADSTS50011`; Multi-Tenant-Hinweis: Admin Consent gilt pro Tenant). + ## 2026-05-15 - 2026-05-15 | fix | gateway | `subAiCallLooping.py`: fehlender Top-Level-Import `extractJsonString` (und `repairBrokenJson`) im Modul-Header ergänzt. Bei `getContexts()`-Success (jsonParsingSuccess=True, overlapContext='') flog ein `NameError`, wurde vom zu breiten `except Exception` als "completePart not serializable" geschluckt, hat `mergeFailCount` hochgezählt und nach 3 Iterationen leeren String zurückgegeben — Folge: `subStructureFilling` bekam `""` und meldete `tryParseJson failed: Expecting value` / `No elements produced`. Zusätzlich `except`-Hygiene: `(json.JSONDecodeError, KeyError, TypeError)` → WARNING + retry (erwartete Daten-Probleme), generischer `except Exception` → ERROR mit `exc_info=True` und Re-Raise (Code-Bugs werden nicht mehr 3× silently verfressen). Logging enthält jetzt den Exception-Typ als Prefix. diff --git a/d-guides/microsoft-entra-registration-checklist.md b/d-guides/microsoft-entra-registration-checklist.md index 0f5b263..85f88bf 100644 --- a/d-guides/microsoft-entra-registration-checklist.md +++ b/d-guides/microsoft-entra-registration-checklist.md @@ -24,14 +24,17 @@ Hintergrund Konzept Auth- vs. Data-App: [`z-archive/concepts/OAuth-Auth-vs-Data- **App registration** → **Authentication** → **Platform** „Web“ → **Redirect URIs**. -Pro öffentlich erreichbare Gateway-URL **zwei** URIs (exakt, inkl. Schema): +Pro öffentlich erreichbare Gateway-URL **drei** URIs (exakt, inkl. Schema): -| URI | Env-Variable | -|-----|----------------| -| `{origin}/api/msft/auth/login/callback` | `Service_MSFT_AUTH_REDIRECT_URI` | -| `{origin}/api/msft/auth/connect/callback` | `Service_MSFT_DATA_REDIRECT_URI` | +| URI | Env-Variable / Zweck | +|-----|----------------------| +| `{origin}/api/msft/auth/login/callback` | `Service_MSFT_AUTH_REDIRECT_URI` (Login) | +| `{origin}/api/msft/auth/connect/callback` | `Service_MSFT_DATA_REDIRECT_URI` (User-Daten-Connection) | +| `{origin}/api/msft/adminconsent/callback` | Admin-Consent-Flow (abgeleitet aus `Service_MSFT_DATA_REDIRECT_URI`, siehe `_admin_consent_redirect_uri()` in `routeSecurityMsft.py`) | -**In diesem Repo typische Origins** (jeweils beide URIs): +> Fehlt die Admin-Consent-URI, scheitert der Flow mit `AADSTS50011: The redirect URI ... does not match` — der User sieht "Leider können wir Sie nicht anmelden". + +**In diesem Repo typische Origins** (jeweils alle drei URIs): - Lokal: `http://localhost:8000` - INT: `https://gateway-int.poweron.swiss` @@ -67,7 +70,9 @@ Single Source of Truth für die Scope-Liste: `gateway/modules/auth/oauthProvider Viele dieser Permissions erfordern **Administratoreinwilligung** im Tenant: **Grant admin consent for {tenant}**. -Zusätzlicher Flow im Gateway: Admin-Consent-URL unter **`/api/msft/adminconsent`** mit Callback **`…/api/msft/adminconsent/callback`** (Redirect wird aus `Service_MSFT_DATA_REDIRECT_URI` abgeleitet — siehe `routeSecurityMsft.py`). +Zusätzlicher Flow im Gateway: Admin-Consent-URL unter **`/api/msft/adminconsent`** mit Callback **`…/api/msft/adminconsent/callback`** (Redirect wird aus `Service_MSFT_DATA_REDIRECT_URI` abgeleitet — siehe `routeSecurityMsft.py`). Die Callback-URI muss zwingend unter den Redirect URIs in Abschnitt 2 eingetragen sein. + +**Multi-Tenant-Apps (TENANT_ID=`common`):** Admin Consent gilt **pro Tenant**. Ein Admin-Consent durch einen valueon.ch-Admin hat keine Wirkung für pamocreate.com-User. Jeder neue Tenant, der die App nutzt, braucht eine eigene Admin-Zustimmung — entweder durch den Tenant-Admin via `/api/msft/adminconsent` (im PowerOn-Wizard: "Admin-Zustimmung erteilen") oder durch direkten Aufruf von `https://login.microsoftonline.com/{tenant}/v2.0/adminconsent?client_id=...`. Solange das fehlt, bekommen User aus diesem Tenant beim Login den "Anforderung gesendet"-Screen. ---