Noizu.MCP.Auth.Server.RegistrationPlug (Noizu MCP v0.1.6)

Copy Markdown View Source

RFC 7591 dynamic client registration — POST /oauth/register.

This is the endpoint Claude Desktop and Claude Code use when you paste an MCP URL: they register themselves, then run the authorization-code flow. Authentik has never supported it, which is why this facade exists.

Disabled unless dcr: [enabled: true], and when disabled the metadata document omits registration_endpoint so a client never tries.

What keeps an open registration endpoint safe

  • Every redirect_uri is validated (https, or loopback http; no fragment, no userinfo, no wildcard) and, with allowed_redirect_hosts, matched on a label boundary — so https://evil-claude.ai/cb cannot register itself as a claude.ai callback
  • Consent is mandatory for a registered client before any code is issued, so a registration on its own grants nothing
  • The rate-limit hook fires here (:register), because an unlimited registration endpoint is a free row-writer
  • initial_access_token: closes it entirely to callers without a token
  • cache-control: no-store — the response contains a client secret

RFC 7592 client management (a registration_access_token and the CRUD that goes with it) is deliberately out of scope: nothing in the MCP client ecosystem uses it, and it is more credential to leak.