Authorize
Start an OAuth sign-in: where to send the browser, and the state to keep.
A GET that writes, which is the one thing to know about it. It records the authorization it is about to start (the state's hash, the PKCE verifier the exchange will need, and the digest of a flow secret it sets as an HttpOnly cookie) so the callback has something to check against, and that record is the whole reason the callback can refuse a code this deployment never asked for, or one presented from a browser other than the one that asked.
Still safe to repeat: each call mints its own state, and only the one the browser kept is the one it sends back. The rows the others leave expire on their own and are swept by the next call. The cookie is reused when the browser already holds one, so a second tab does not break the first.
Path parameters
Which OAuth provider to sign in with.
Which OAuth provider to sign in with.
Response
Successful Response