Register the browser client
Register the public browser profile with exact Hypertext Transfer Protocol Secure (HTTPS) redirect URIs and exact browser origins. Local development may use Hypertext Transfer Protocol (HTTP) on a literal loopback host. The redirect URI and browser origin are separate values. An origin contains a scheme, host, and optional port, with no path, query, fragment, wildcard, or credentials. See Prepare a client for registration for the complete validation rules.Start authorization with a browser navigation
Create a direct authorization-code request with these values:response_type=code- A registered
client_idand exactredirect_uri - A PKCE
S256challenge dpop_jktfor the grant’s DPoP key- The exact environment
resource - Optional
openidwith a requirednonce
fetch.
Perflo accepts query and form_post response modes. It rejects fragment mode, implicit responses, arbitrary request objects, and unissued request URIs.
Exchange the code from the registered origin
The token endpoint accepts a cross-origin request from an exact origin registered to an enabled public browser client. Send the sameclient_id, the PKCE verifier, the code, the exact redirect URI, and a DPoP proof.
Perflo does not set Access-Control-Allow-Credentials. The interaction cookie is host-only and never authenticates a token or API request.
Pushed Authorization Requests (PAR), confidential-client revocation, introspection, and client administration do not enable browser CORS. A public client’s resource owner revokes its grant from the host-only account page.
Send protected requests from the same client
For a protected application programming interface (API) operation, send the DPoP access token and a new proof as described in Use DPoP with Perflo tokens. The request origin must belong to the enabled client identified by the validated token. An accepted preflight does not authenticate the later request. Perflo rechecks the actual client, origin, token, proof, grant, and scope. Dynamic CORS responses echo the exact accepted origin and never use*.
Use only the allowed browser headers
Browser preflights may request these headers when the target route uses them:AuthorizationDPoPIdempotency-KeyX-Request-IdContent-Type
DPoP-Nonce, Idempotent-Replayed, Retry-After, X-Request-Id, and WWW-Authenticate. It rejects Origin: null, unregistered origins, wildcard matches, and a disabled or mismatched client.