Kiosk check-in
In a kiosk check-in, the visit starts on a screen the clinic controls, such as a kiosk in the waiting room or the front desk's computer, and the patient finishes it on their own phone. The clinic's screen can't reach the patient's wallet, and a shared screen is the wrong place to review health information, so the screen shows a code that the patient scans, and the wallet on the phone answers the request. The diagram shows the four steps and what each device holds. You can try it in the kiosk demo.
The four steps
What the handoff must guarantee
The handoff is everything that connects the clinic's screen to the patient's phone: the code, the page the phone opens, and the service that carries messages between them. Whatever form it takes, it has to deliver the request the kiosk built to the phone unchanged, connect the phone to the one session that is waiting for it, and bring the encrypted response back to that session. The code identifies the session, so it needs a random identifier that no one can guess from another visit's code.
Anyone who scans the code can read the request, so the request should say what the clinic needs without containing private details itself. The code also doesn't prove who is holding the phone. A response tells the kiosk what the patient chose to share; matching it to the right patient's record, identity checks, clinical provenance, writing the data back to the EHR, and billing stay with the site and its integration.
Keys and origins
The kiosk's key pair is the HPKE key pair of the ordinary same-device
flow: the public key travels to the phone inside
encryptionInfo, and the wallet seals its response to it.
That is why the connection can't read the response, and why a
response changed on the way fails to decrypt at the kiosk instead of
reaching staff altered.
The page that calls navigator.credentials.get is the
check-in page on the phone, not the kiosk, and the wallet binds its
response to the origin of the page that called it
(TR-2). The check-in page must therefore
pass exactly the argument the kiosk built, and the kiosk must compute
the session transcript with the check-in page's origin rather than its
own, together with the exact encryptionInfo string it sent
(TR-1). If the two origins differ at
all, even by a trailing slash, the response doesn't decrypt. The
client library's
kiosk hand-off does all of this.
The connection can vary
The spec defines the request, the wallet step, and the response. How the phone reaches the waiting session is outside its scope (§1.4): once the check-in page on the phone makes the call, the rest is the ordinary same-device flow of §8. A clinic can therefore choose the connection that fits its setting, such as a QR code on a kiosk or front-desk screen, or a link that the clinic's own app or a text message opens on the patient's phone, as long as it meets the guarantees above. What the clinic's screen shows when the answer arrives is also up to the implementation.