Composer-MCP-Zugriff mit Cognito OAuth schützen
Composer kann seinen MCP-Endpunkt mit Amazon-Cognito-Access-Tokens schützen und weiterhin die offiziellen Transport-Hooks des WordPress MCP Adapters verwenden. Er ersetzt den Adapter nicht und erzeugt keinen Schatten-WordPress-Benutzer pro externem Principal.
Die Autorisierung ist die Least-Privilege-Schnittmenge aus:
- der Composer-Rolle aus der Cognito-Gruppe des Tokens;
- der maximalen Rolle des OAuth App Clients;
- den im Access Token tatsächlich gewährten Composer-Scopes;
- Site Contract, Blueprint, Eigentum, Validierung und menschlicher Freigabe.
Zugriffsmodi
- Open behält den abwärtskompatiblen WordPress-authentifizierten Pfad.
- Protected validiert vorhandene Cognito-Bearer-Tokens und kann den konfigurierten Kompatibilitätspfad behalten.
- Protected Required schließt im Fehlerfall: Ohne vollständigen Provider, Gruppen-Mapping und erlaubten Client werden keine Composer-Tools angeboten; jeder MCP-Aufruf benötigt ein gültiges Bearer-Token.
Wählen Sie den Modus bewusst im Site Contract und unter MCP Access. Aktivieren Sie Protected Required erst nach einem erfolgreichen OAuth-Rundlauf.
Identity Provider
Composer kann AWS-Region und User Pool ID aus einer anderen WP-Suite-Komponente auflösen. Die Admin-Oberfläche zeigt effektive Region, Pool, Issuer, JWKS-URL, Quelle und Bereitschaft. Fehlt die Auflösung oder ist sie falsch, aktivieren Sie die manuelle Konfiguration und tragen beide Werte ein.
AWS Region: eu-central-1
User Pool ID: eu-central-1_AbCd1234
Issuer: https://cognito-idp.eu-central-1.amazonaws.com/eu-central-1_AbCd1234
Diese Kennungen sind keine Geheimnisse. Client Secrets und private Schlüssel gehören nicht in Composer.
Cognito-Domain und öffentlicher App Client
OAuth benötigt eine User-Pool-Domain. Verwenden Sie entweder eine generierte Cognito-Prefix-Domain oder eine Custom Domain mit ACM-Zertifikat und DNS. Nur ein App Client genügt nicht: Ohne Domain gibt es keinen Hosted-UI-Endpunkt.
Der dedizierte öffentliche App Client verwendet:
- Authorization Code Grant;
- PKCE mit
S256; - kein Client Secret;
- die exakte HTTPS-Callback-URL des MCP-Clients;
openidund die Composer-Resource-Server-Scopes;- bei Bedarf Refresh Tokens.
WP Suite Orchestration ab v1.0.93 kann Resource Server und App Client optional
für neue oder bestehende User Pools erstellen. Bei einem neuen Pool verlangt
der Deployment Wizard außerdem eine generierte oder benutzerdefinierte Cognito-
Domain. Extern verwaltete bestehende Pools dürfen ihre separat verwaltete Domain
behalten. Kopieren Sie den Stack-Output AgentComposerMcpOAuthClientId in das
OAuth-Client-Mapping von Composer.
Callback-URLs müssen einschließlich Pfad und abschließendem Slash exakt passen.
Gruppen, Rollen, Clients und Scopes
Ordnen Sie exakte cognito:groups-Werte Composer-Rollen zu. Bei mehreren Gruppen
ist die höchste zugeordnete Rolle der Ausgangspunkt. Jeder erlaubte App Client
erhält ein lokales Label und eine maximale Rolle; diese Grenze kann die
Gruppenrolle nur reduzieren.
Unterstützte OAuth-Scopes:
openid
composer/read
composer/draft
composer/propose
composer/publish.request
Composer normalisiert Cognito-Resource-Server-Scopes intern zu composer.read,
composer.draft, composer.propose und composer.publish.request. Legacy-
Installationen können zusätzlich sc.group.<group> ableiten. Die signierte
cognito:groups-Claim bleibt die Quelle der Mitgliedschaft; Scopes erfinden
keine Gruppe.
Im getesteten Legacy-Cognito-Ablauf war openid für den gewünschten Claim-Pfad
notwendig. Das erfordert nicht ChatGPT OIDC Email/Domain Claiming. Composer prüft
das signierte Access Token, nicht das ID Token, und veröffentlicht kein
Issuer-ungültiges Proxy-OIDC-Dokument.
Discovery muss vor Authentifizierung öffentlich sein
MCP-Protected-Resource-Metadaten, OAuth-Authorization-Server-Metadaten und die
401-WWW-Authenticate-Challenge müssen ohne Bearer-Token verfügbar sein. Sonst
kann der Client die Anmeldung nicht ermitteln.
Das gilt für direktes HTTP unter /wp-json/mcp/smartcloud-agent-composer und
für ein darauf zeigendes OpenAI Secure MCP Tunnel HTTP-Profil. Alte STDIO-
Profile übertragen externe Challenge und Bearer-Token nicht. Sichern und
migrieren Sie jedes Site-Profil auf HTTP, starten Sie den jeweiligen Dienst neu
und prüfen Sie Discovery vor dem Reconnect.
ChatGPT konfigurieren
- Im Developer-Mode-App den richtigen Site-Tunnel oder direkten Server wählen.
- Unter Advanced OAuth settings einen benutzerdefinierten öffentlichen Client wählen.
- ChatGPTs Callback-URL exakt in den Cognito App Client kopieren.
- Client ID eintragen, Secret leer lassen, Token Endpoint Auth auf
nonesetzen. openidund die benötigten Composer-Scopes anfordern.- Cognito Hosted UI Login und Consent abschließen.
- Reconnect ausführen, Aktionskatalog prüfen und zuerst read-only testen.
401 gegenüber 403
- 401 Authentication required: Token fehlt, ist ungültig/abgelaufen, hat falschen Issuer, Audience oder Client oder kann nicht verifiziert werden.
- 403 Forbidden: Authentifizierung war erfolgreich, aber Gruppe, Client- Grenze, Scope, Rolle, Eigentum oder Site Contract verbietet den Aufruf.
Beheben Sie das nicht mit WordPress-Administratorrechten oder deaktiviertem Contract. Prüfen Sie die redigierten Details unter Audit & portability.
Audit und Token-Sicherheit
Composer erfasst Entscheidungen, abgeschlossene Tool-Aufrufe, externe Identität, Ergebnis und redigierte Diagnose in einer manipulationssichtbaren Audit-Kette. Die UI zeigt lokale Browserzeit mit Zone; Details bewahren den exakten UTC-Wert.
Vollständige Bearer-Tokens, Authorization Header, Client Secrets, Request- Argumente und Tool-Ergebnisse dürfen nie gespeichert oder angezeigt werden.
Produktionscheckliste
- Region, Pool, Issuer und JWKS-URL sind korrekt.
- Generierte oder Custom Domain liefert die Hosted UI.
- Öffentlicher Client nutzt Code + PKCE S256 und exakten Callback.
- Erforderliche Gruppen stehen im Access Token und sind exakt zugeordnet.
- Client ID, maximale Rolle und erlaubte Composer-Scopes sind korrekt.
- Unbekannte Clients scheitern entsprechend der Policy.
- Discovery funktioniert ohne Bearer über die gewählte HTTP-Route.
- Reader-, Contributor- und Publisher-Grenzen sind getrennt getestet.
- Publisher darf Freigabe anfordern, aber nicht direkt veröffentlichen.
- Erfolgreiche und abgewiesene Aufrufe erscheinen ohne sensible Daten im Audit.
Transport: Direktes MCP oder Secure Tunnel und ChatGPT.
