Claude's forbindelsesdialog prøver OAuth først. Indtil nu var svaret 404, og eneste vej ind var at lave et token og sætte det ind i en adresse. Nu er instansen sin egen autorisationsserver for MCP-klienter: - /.well-known/oauth-protected-resource(/mcp) og /.well-known/oauth-authorization-server peger på login'et; en 401 fra /mcp bærer WWW-Authenticate med resource_metadata - /oauth/register (RFC 7591), kun offentlige klienter; registreringer, ingen godkender, ryddes efter et døgn - /oauth/authorize sender til /forbind, som logger ind med det almindelige login og spørger "Claude vil forbinde til din konto" — og viser, hvor adgangen sendes hen, fordi navnet er klientens eget - /oauth/token: authorization code + S256 PKCE, koden gælder ét minut og én gang; ud kommer et almindeligt API-token, listet under Tokens med klientens navn, og en ny forbindelse fra samme klient erstatter det - /mcp tager nu også Authorization: Bearer; ?key= virker stadig Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
30 lines
1.5 KiB
SQL
30 lines
1.5 KiB
SQL
-- At forbinde Claude med sin konto i stedet for med et token, man selv har lavet.
|
|
--
|
|
-- Claude's forbindelsesdialog prøver OAuth, før den gør noget andet, og indtil nu
|
|
-- var svaret "det findes ikke her" — så den eneste vej ind var at lave et token i
|
|
-- indstillingerne og sætte det ind i en adresse. Det virker, men det er en
|
|
-- hemmelighed, man skal kopiere mellem to programmer, og det er præcis det trin,
|
|
-- folk går i stå på.
|
|
--
|
|
-- En klient registrerer sig selv (RFC 7591) og får et id. Ingen hemmelighed: en
|
|
-- klient, der kører hos en anden, kan ikke holde på en, så det er PKCE, der beviser,
|
|
-- at det er den samme, der kommer tilbage med koden.
|
|
CREATE TABLE oauth_clients (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
-- JSON-liste. Kun adresser, klienten selv opgav ved registreringen, kan få en
|
|
-- kode sendt hen til sig — ellers er "godkend" en knap, der sender adgangen til
|
|
-- hvem som helst.
|
|
redirect_uris TEXT NOT NULL,
|
|
created_at INTEGER NOT NULL
|
|
);
|
|
|
|
-- Det, en godkendelse udsteder, er et almindeligt API-token. Det står derfor på
|
|
-- siden med tokens, kan tilbagekaldes der, og når alle de steder, et token
|
|
-- allerede gælder. Kolonnen siger, hvilken klient det hører til, så en ny
|
|
-- godkendelse fra den samme klient erstatter den gamle frem for at lægge sig ved
|
|
-- siden af.
|
|
ALTER TABLE api_tokens ADD COLUMN oauth_client_id TEXT REFERENCES oauth_clients (id) ON DELETE CASCADE;
|
|
|
|
CREATE INDEX idx_api_tokens_oauth_client ON api_tokens (oauth_client_id) WHERE oauth_client_id IS NOT NULL;
|