ADR 0017. Operator Linking via Signed Assertion and PlayerPal Popup
Status
Accepted.
Supplies the link-flow mechanics left open under ADR 0009.
Context
The player must consent to PlayerPal on a PlayerPal-controlled surface. The operator must prove which local player is connecting without sending PII or putting secrets in query strings. After consent, the operator needs its alias (and requested provider aliases) without a per-launch PlayerPal call.
Decision
- The operator (or provider) calls
POST /v1/link-intentswith a short-lived signed assertion in the POST body (lifetime about five minutes; replay protectedjti/nonce; no email/name/phone claims). - PlayerPal returns a
link_urlcontaining only an opaque one-time code. - The player completes authentication and consent on a first-party PlayerPal
page (popup or redirect). Results return to the embedder via origin-checked
postMessage. - The operator exchanges a one-time result code (
POST /v1/link-results/exchange) and receivespp_plr_opr_...plus requestedpp_plr_prv_...values for integrations already authorized for that operator.
requested_provider_integrations does not grant scope. Partner assertion
proves context; it is not a permanent player credential.
HTTP examples: spec §10 and §37.3-§37.5.
Consequences
- The earlier open question on "where the one-time link surface lives" is closed: PlayerPal-hosted ceremony, operator-triggered intent.
- Game launch does not call PlayerPal (ADR 0015).
- See docs/linking-and-bootstrap.md.