Auth model for Kobo reading-services endpoints (annotations) #23
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
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?
Future implementation spec for annotation sync over the Kobo
reading_services_hostendpoints will need an auth model. Documenting the proposed approach here so the spec can reference it.Observed from the annotations research spike
The Kobo device sends annotation traffic with a Kobo-cloud-issued Bearer JWT in the
Authorizationheader. Example claims (captured vianc :5001):The JWT itself rotates (~1 hour expiry). The
kobo_user_idclaim inside it is stable for the account.Proposed auth model
Trust-on-first-use on the
kobo_user_idclaim, mirroring the existing first-login-owner pattern (#19):kobo_user_id.kobo_user_iddiffers from the bound value.Surface:
/api/UserStorage/*,/api/v3/content/*, plus whatever else the annotations spec ends up owning.Why not validate the JWT signature
The JWT is signed with a Kobo-cloud key. We're a self-hosted replacement for Kobo cloud; we intentionally don't have Kobo's key and can't check it. TOFU on the user ID is the closest available analogue.
Related
docs/superpowers/specs/2026-04-20-kobo-annotations-spike-design.md(pending writeup atdocs/kobo-annotations-spike-findings.md)