BLOCKING: Switch Woo auth from consumer keys to WordPress Application Passwords #5
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Status
Blocking for POC. This architectural decision must follow the well-supported path before any POC implementation or UAT proceeds.
Summary
The current docs (CONTENT-WOO.md, OPENAPI.md, Architecture) lock the server into authenticating to WooCommerce REST v3 using WooCommerce consumer keys (ck_/cs_ pair, generated under WooCommerce → Settings → Advanced → REST API) sent as HTTP Basic Auth.
Research shows the well-supported, lower-friction path for a self-hosted single-store deployment like Whidbey Wood Store is WordPress Application Passwords: a dedicated low-privilege WordPress user, an application password generated under Users → Profile, and the same Basic Auth shape (
username:application_password). This is the method the official WooCommerce mobile app uses for store-credentials login, and it is the method WooCommerce's own MCP integration docs explicitly prescribe — "Do not use your account password or a WooCommerce REST API key."Consumer keys are not wrong, but they are the heavier path: extra admin UI step, key tied to a specific user with an explicit read/write scope, and no benefit over application passwords for a first-party, self-hosted integration.
Required change
SLAB_AES_KEYfrom.envas today); the browser never holds it.Documentation references (must be updated)
409 duplicate_skuerror. Update any auth-related notes and the Settings endpoint that accepts credentials.Acceptance criteria
docs/refactor-v2(or its successor) reflect the change.Notes
/wp-json/wc/v3/) — only the credential type.Issue #5 docs on
docs/refactor-v2:7bfba9fApplication Passwords (DEPLOYMENT setup: dedicated WP user, HTTPS, Users → Profile, AES-GCM, FastAPI-only)3921a9ddeploy compose files; no consumer-key leftover in deploy docsStill open: live smoke “capture → Woo draft” is POC implementation, not this docs pass. Do not close until that smoke exists.
The docs on refactor-v2 correctly switch to Application Passwords but leave negative framing throughout ("not consumer keys", "not the account login password", etc.). These need a cleanup pass to remove all references to consumer keys. The clean docs should only state what the system does, not what it replaced. The issue cannot close until the slop is removed from CONTENT-WOO, OPENAPI, ARCHITECTURE, DEPLOYMENT, DATA-MODEL, AGENTS, UX, and IMPL-PLAN. One note in the AGENTS precedence section acknowledging the archived PRD lines are stale is acceptable.
Negative framing removed from all normative docs:
All consumer-key references removed from normative docs. Archive PRD note preserved (known stale). Server rejection of old
woo_consumer_key/woo_consumer_secretfield names kept as functional requirement.Test cases needed once implementation exists:
woo_credentials_configured: true.woo_app_passwordwrite-only.woo_consumer_key/woo_consumer_secretreturns 422 or is ignored.Verified in main @
0c00d25: woo.py uses wp_username + app_password (AES-GCM), no consumer keys. SETTINGS-15 enforced. Done.