SMART Permission Tickets
0.1.0 - ci-build
SMART Permission Tickets, published by . This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/jmandel/smart-permission-tickets-wip/ and changes regularly. See the Directory of published versions
This page tells you what to build, by role. It is non-normative; the architecture page governs. Read this first to scope the work, then implement against the normative sections it links to.
You are adding one grant type to your existing SMART-on-FHIR token endpoint. No new endpoints, no user-facing screens.
grant_type=urn:ietf:params:oauth:grant-type:token-exchange with a subject_token_type of https://smarthealthit.org/token-type/permission-ticket. Advertise both in .well-known/smart-configuration, along with the ticket_type URIs you accept. (Transport)exp/aud, revocation check, presenter binding, identity evidence, must-understand, subject resolution. Implement it as written — the step order matters for correct error responses. (Server-Side Validation)subject.patient demographics, corroborated by identity evidence when present. Zero or multiple matches → reject with invalid_grant. (Subject Resolution)access, client eligibility, ticket-type rules, and your own policy. Enforce data_period by applying each resource type's designated date search parameter as an implicit filter — searches your server already supports. (Access Calculation, Data Period Enforcement)Start with UC1 (patient self access): it has no requester, no context fields, and a single policy question — can you match the patient. The conformance section is your checklist; the signed examples are your test vectors.
You verify real-world facts and sign a JWT. The Data Holder relies on your verification, so most requirements are about what you do before signing.
{iss}/.well-known/jwks.json. (Issuer Key Publication)iss, aud, exp, iat, jti, ticket_type, subject, access), presenter binding for individual-access types, and identity evidence for each person whose verification is the basis of the grant. (Issuer Requirements)jti. (Issuer vs. Data Holder Responsibility, Proposal 007)One deployable kickoff for delivering tickets to clients — a standard SMART App Launch whose token response carries tickets — is drafted in Proposal 003.
.well-known/smart-configuration (grant_types_supported, smart_permission_ticket_types_supported).subject_token, requesting SMART v2 scopes within what the ticket allows. (Request)interaction_required if you can: it means the Data Holder could not match the patient and wants one interactive disambiguation. Background clients can treat it as an error and move on. (Proposal 001)The signing and verification code in the source bundle generates all the worked examples and is a working reference for each role.