Call your backend only. Use verifyUrl as returned — do not build it, do not append to it, and do not navigate to it.

Handoff helper

core/verify-handoff.ts:

Start verify

The landing page

After verification the browser arrives on your registered returnUrl with a plain GET carrying ?session_id=…&state=…. Neither value is sensitive and neither proves anything — the verification is finished on your server, which reads GET /session/{id} with its own credentials. A common shape: returnUrl points at a small server GET route that resolves the outcome, sets your own session cookie, and 303s into the Angular app (see Backend overview). A routed Angular page works too; either way the component only asks your own API:
There is no callback route in the SPA, no secret query params to read, and no postMessage listener — the SPA never handles verification data. More: Frontend overview · Backend overview