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:

  1. der Composer-Rolle aus der Cognito-Gruppe des Tokens;
  2. der maximalen Rolle des OAuth App Clients;
  3. den im Access Token tatsächlich gewährten Composer-Scopes;
  4. 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;
  • openid und 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

  1. Im Developer-Mode-App den richtigen Site-Tunnel oder direkten Server wählen.
  2. Unter Advanced OAuth settings einen benutzerdefinierten öffentlichen Client wählen.
  3. ChatGPTs Callback-URL exakt in den Cognito App Client kopieren.
  4. Client ID eintragen, Secret leer lassen, Token Endpoint Auth auf none setzen.
  5. openid und die benötigten Composer-Scopes anfordern.
  6. Cognito Hosted UI Login und Consent abschließen.
  7. 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.