Nutzungsbedingungen sind in einem Kundenportal selten optional: DSGVO, Einwilligung, rechtliche Nachweisbarkeit. Power Pages bringt dafür ein eingebautes Feature mit, das den Nutzer beim Anmelden zur Zustimmung zwingt.
Die Einrichtung sieht nach fünf Minuten Site Settings aus, hat aber eine Falle, die keinen Fehler wirft: Ist ein bestimmtes Content Snippet leer, erscheint der Dialog schlicht nicht. Kein Fehler, keine Warnung, keine Konsolenmeldung.
Dieser Beitrag zeigt den kompletten, gegen die Microsoft-Doku geprüften Aufbau, den stillen Fehler und eine Beobachtung aus dem Demo-Portal, die erklärt, warum der Dialog bei Ihrem eingeloggten Testnutzer trotzdem ausbleibt.
Das eine Site Setting, das den Dialog steuert
Der wiederkehrende Zustimmungs-Dialog hängt an einem einzigen dokumentierten Setting plus einem Datum:
| Site Setting | Wert | Bedeutung |
|---|---|---|
| Authentication/Registration/TermsAgreementEnabled | true | Schaltet die Zustimmungspflicht ein. Nutzer müssen zustimmen, bevor sie als authentifiziert gelten. Default false. |
| Authentication/Registration/TermsPublicationDate | Datum (GMT) | Stichtag der aktuellen Fassung. Wer nach diesem Datum nicht zugestimmt hat, wird beim nächsten Sign-in erneut gefragt. Ohne Datum: bei jedem Sign-in. |
Beides ist wörtlich so in der Microsoft-Doku belegt. Ein Hinweis zur Ehrlichkeit: In älteren Blogs (und teils in älteren Portalen) taucht zusätzlich Authentication/Registration/TermsAndConditionsEnabled auf, ein separates Registrierungs-Setting. In der aktuellen Power-Pages-Doku ist dieses Setting nicht mehr beschrieben. Verlassen Sie sich für das wiederkehrende Feature auf TermsAgreementEnabled + TermsPublicationDate.
Praktische Beobachtung, nicht aus der Doku: Setzen Sie TermsPublicationDate auf ein Datum in der Vergangenheit. Ein Zukunftsdatum bedeutet logisch, dass "nach diesem Datum" noch niemand zugestimmt haben kann, der Trigger greift dann nicht wie erwartet. Format als GMT, z. B. 2026-09-28T00:00:00Z.
Das Content Snippet, das jeder vergisst
Hier sitzt die Falle. Der Dialog braucht Inhalt, und der kommt aus Content Snippets:
| Snippet | Typ | Default |
|---|---|---|
| Account/Signin/TermsAndConditionsCopy | HTML | leer - der eigentliche Bedingungstext, Pflicht |
| Account/Signin/TermsAndConditionsHeading | Text | "Terms and Conditions" |
| Account/Signin/TermsAndConditionsAgreementText | Text | "I agree to these terms and conditions." |
| Account/Signin/TermsAndConditionsButtonText | Text | "Continue" |
TermsAndConditionsCopy ist laut Doku standardmässig leer und muss vom Administrator gefüllt werden. Nur: Bleibt es leer, erscheint der Dialog gar nicht - obwohl alle Site Settings korrekt stehen. Kein Fehler, kein Log, nichts. Microsoft dokumentiert zwar, dass das Snippet gefüllt werden muss, warnt aber an keiner Stelle davor, dass ein leeres Snippet das gesamte Feature still aushebelt.
Genau das habe ich im Demo-Portal nachgestellt: Settings auf true, Datum in der Vergangenheit, Zustimmungsdatum des Kontakts leer - und die Seite lädt ohne jeden Dialog. Erst nach dem Anlegen des Copy-Snippets erscheint er:
Warum der Dialog bei Ihrem Testnutzer trotzdem fehlt
Eine Beobachtung aus dem Hands-on, die viel Debugging-Zeit spart: Der Dialog ist kein Overlay, das bei jedem Seitenaufruf prüft. Er wird als eigene Seite (/Account/Login/TermsAndConditions) während des Sign-in-Flows ausgeliefert, bevor die Anmeldung abgeschlossen ist. Die Doku formuliert es als "the next time they sign in".
Konsequenz: Wenn Sie mit einem Nutzer testen, der bereits angemeldet ist (aus einer Session vor dem Aktivieren), passiert nichts, egal wie oft Sie neu laden. Sie müssen sich ab- und wieder anmelden, damit die Prüfung überhaupt läuft. Das ist der zweite stille Stolperstein neben dem leeren Snippet.
Die Mechanik dahinter
Beim Sign-in vergleicht Power Pages den Stichtag mit dem Zustimmungsdatum des Kontakts. Das Feld am Kontakt heisst msdyn_portaltermsagreementdate (nicht adx_termsagreeddate, wie in älteren Quellen). Als Mechanik, hergeleitet aus dem dokumentierten Verhalten:
- Zustimmungsdatum leer oder älter als
TermsPublicationDate→ Dialog erscheint - Zustimmungsdatum jünger oder gleich → kein Dialog
Beim Bestätigen schreibt Power Pages den aktuellen Zeitstempel in dieses Feld.
Bedingungen aktualisieren und erneut abfragen
- Den Text in
Account/Signin/TermsAndConditionsCopyaktualisieren TermsPublicationDateauf das heutige Datum setzen (in der Vergangenheit, nicht in der Zukunft)- Cache invalidieren
- Alle Nutzer, deren
msdyn_portaltermsagreementdateälter ist, werden beim nächsten Sign-in erneut gefragt
Externe Identity Provider
Ein ehrlicher Hinweis: Zum Verhalten dieses klassischen Terms-Features mit externen Identity Providern (Entra External ID, Azure AD B2C) sagt die aktuelle Doku nichts. Wenn der Login-Flow ausserhalb von Power Pages läuft und die Portal-/signin-Strecke umgeht, ist offen, ob die Prüfung greift. Das gehört getestet, nicht angenommen. Code-First-Sites haben ausserdem ein separates, eigenes Terms-Feature - nicht mit diesem verwechseln.
Checkliste vor dem Go-Live
- □
Authentication/Registration/TermsAgreementEnabled=true - □
Authentication/Registration/TermsPublicationDate= gültiges Datum in der Vergangenheit (GMT) - □
Account/Signin/TermsAndConditionsCopyist nicht leer - □ Zum Testen: einmal ab- und wieder anmelden (der Dialog kommt beim Sign-in, nicht beim Seitenaufruf)
- □ Kontaktfeld
msdyn_portaltermsagreementdateist leer oder älter als der Stichtag
Stimmt einer dieser Punkte nicht, bleibt der Dialog aus - lautlos.
Weiterführende Artikel
Power Pages Authentifizierung erklärt
OAuth 2.0, OpenID Connect, SAML, SSO und Social Login in Power Pages, der Rahmen, in dem der Terms-Dialog beim Sign-in läuft.
Artikel lesen → SicherheitPower Pages Sicherheitsarchitektur
Table Permissions, Web Roles und das hierarchische Sicherheitsmodell im Detail.
Artikel lesen → SicherheitSicherheit und Compliance in Power Pages
Der grössere Rahmen aus DSGVO, Datenschutz und Governance, in den Nutzungsbedingungen gehören.
Artikel lesen →Quellen
- Microsoft Learn: Implement privacy protections, Agreeing to terms and conditions (Site Settings
TermsAgreementEnabled/TermsPublicationDate, die vier Content Snippets, "Copy is empty by default") - Microsoft Learn: Contact table reference (Feld
msdyn_portaltermsagreementdate, Portal Terms Agreement Date) - Hands-on-Nachstellung im Power-Portals-Demo-Portal (Enhanced Data Model), inkl. Silent-Failure bei leerem Copy-Snippet und Sign-in-Trigger