VIEW THIS AS

Auto mode follows the Route Engine until you choose a viewpoint.

YOU ARE HERE

ROUTE CHECK

CONNECTED TO

WHAT NEXT

Use the canonical route for this room, or HELP if you are unsure.

How Superintelligence Works | Agent OAuth PAR — Pushed Requests, Client Binding and Expiring Request URIs

An AI agent that needs a human to authorise access to an external service must not assume that placing the right-looking parameters in a browser URL is enough. In OAuth 2.0 Pushed Authorization Requests (PAR), the client first sends its intended authorization request directly to the authorization server over a protected back channel. The server verifies the request, returns a short-lived request_uri reference, and the client uses that reference to start the user’s browser-mediated consent step. The result is a more tightly controlled request boundary, not an automatic permission grant.

The practical rule is simple: assemble the exact client identity, redirect, scopes, state and PKCE challenge; submit them to the server’s published PAR endpoint; validate the successful 201 response and expiry; bind the returned request URI to the same client and pending transaction; use it once in an appropriate authorization request; and verify the callback and token exchange independently. If a client receives a timeout or a user returns too late, reconcile or begin a fresh transaction rather than guessing that an old URI remains safe. Never claim the user’s consent or the resulting access token exists until the authority confirms it.

This is a specialist explanation of currently implemented OAuth engineering, not a claim that artificial superintelligence exists. It uses the formal requirements in RFC 9126 and the newer OAuth security guidance in RFC 9700, with constructed numerical and incident scenarios clearly identified as examples. The aim is to make authorization requests both understandable to a developer and reviewable by a system owner without encouraging an agent to impersonate the human who must consent.

Contents

Understand the five roles before pushing anything

OAuth involves a resource owner, client, authorization server and resource server; an agent may be part of the client implementation but is not automatically the resource owner. The browser or user agent connects these parties during an interactive authorization step. An agent’s ability to call an API does not by itself confer the right to approve requested access. A human’s permission decision is a separate event owned by the relevant service’s authorization process.

The client has a registered identity and permitted redirect destinations. It may be a confidential backend client, a public application, or a more specialised client profile. Authentication at the PAR endpoint is required when applicable to that registered client type; sending a client_id is not equivalent to proving possession of a confidential client’s secret. OAuth clients must follow the server’s registered authentication method and profile rather than invent one from documentation fragments.

The authorization server accepts the pushed request and issues a request_uri reference. That URI refers to data held or otherwise managed by the authorization server; it is not an arbitrary external URL for the agent to fetch. RFC 9126 does not require that other parties be able to retrieve the underlying request data through that URI. Treat request_uri as an opaque reference whose internal format is controlled by the server.

The resource server ultimately receives access tokens, subject to its own scope, audience and authorization checks. PAR never substitutes for validating those tokens. It constrains how the request for authority is lodged and later recovered during authorization. Authorization, token issuance and use of a token against an API are separate stages with distinct proofs of success.

An accurate diagram therefore has the client first talking directly to the authorization server, then the browser visiting the authorization endpoint with the returned reference, then a callback to the client, and finally a token exchange under the selected OAuth flow. If an agent reports ‘connected’ after only receiving request_uri, it has skipped the most important trust boundary: the owner has not yet approved anything.

The normative starting point: RFC 9126 is the contract

The authoritative OAuth 2.0 Pushed Authorization Requests specification (RFC 9126) defines the PAR endpoint as an HTTPS address accepting HTTP POST with application/x-www-form-urlencoded request parameters. The server’s discovery metadata can publish the endpoint under pushed_authorization_request_endpoint. Reading official metadata avoids guessing a path such as /par or /oauth/request on a specific provider.

Typical submitted parameters include client_id, response_type, redirect_uri, scope, state, code_challenge and code_challenge_method. The client does not include request_uri in the push itself; the server creates that value when the request is accepted. The request can also contain extension parameters supported by the authorization server, including some OpenID Connect or resource-indicator requests. A generic agent must not assume every extension is accepted everywhere.

The server validates the request before producing a successful result. The RFC requires a 201 Created response with JSON containing request_uri and a positive integer expires_in measured in seconds. The request URI is bound to the client that posted the request. A client must not treat any response shaped like JSON as a successful authorization initiation; status code, media type, field type, issuer and endpoint authenticity all matter.

The server-generated reference must have an unpredictable component. Developers should not build their own deterministic request_uri from a user identifier, count or timestamp and hope that it is private. The authorization server owns creation and storage of the reference, and its binding rules prevent another client from reusing the handle as its own authorization request.

The RFC also provides authorization server metadata and client metadata for requiring PAR. A server or individual client can be configured to refuse ordinary front-channel parameter requests. When the requirement is active, a browser URL that carries the old parameters directly is not an acceptable fallback. The client should surface the configuration failure honestly instead of silently downgrading the requested security property.

Walk through the back-channel and front-channel steps

First the application resolves its configured authorization-server issuer and discovers the metadata from a trusted route. The agent verifies that the issuer and endpoint match the service the user selected. A link in an email or model-generated suggestion is not an alternative source of authority for OAuth endpoints. If discovery is ambiguous, the client must stop rather than sending credentials to an untrusted host.

Second, the application prepares a transaction record: expected issuer, client ID, exact redirect URI, approved scopes, PKCE verifier retained privately, derived challenge, state value, requested resource and creation timestamp. The record should be scoped to one attempted authorization. Whether an agent is allowed to request a certain scope is a product-policy question that must be answered before the push, not decided by the model after it sees a consent page.

Third, the client posts the request parameters to PAR, authenticating according to the registered client profile. It inspects the 201 response and captures the opaque request_uri and expires_in. The resulting short-lived reference is now sufficient to initiate the interactive authorization request, but it is not an access token or a proof that the user granted consent.

Fourth, the client sends the browser to the authorization endpoint with its client_id and the returned request_uri as described in RFC 9126. The authorization server recovers and validates the pushed request. The client must use each request_uri only once; the server should enforce one-time usage while accounting for limited browser refresh behaviour. A rejected expired reference is an expected boundary, not a license to replay.

Fifth, after the user acts, the application validates the actual authorization response: expected state, issuer context where applicable, correct redirect destination, and an authorization code tied to the correct transaction. The client then makes the appropriate token request with the correct PKCE verifier and its own authentication if required. Only a successful token response and subsequent authorised API operation demonstrate what access exists.

PAR, PKCE, signed requests and access-token proof are not synonyms

PAR is about lodging an authorization request directly with the authorization server and later referencing it. Proof Key for Code Exchange (PKCE) is a separate binding method for the authorization code exchange. A client may use both: it pushes a code_challenge and keeps its code_verifier private until the exchange. Neither method replaces the other’s purpose. The detailed OAuth PKCE guide addresses verifier construction and redirect-state checks.

JWT-Secured Authorization Request (JAR), specified in RFC 9101, is another mechanism. It wraps authorization parameters in a Request Object with integrity and related protections under the applicable configuration. RFC 9126 allows servers to accept a Request Object at the PAR endpoint. Using JAR with PAR therefore can be complementary rather than duplicative, but it imposes additional key and validation work.

Demonstrating Proof of Possession (DPoP) addresses sender-constraining tokens and related request proofs. It does not create the PAR reference or conduct the human’s consent step. The separate DPoP token guide explains proofs, nonces and replay windows once tokens and protected API calls are involved.

OAuth device authorization uses a different interactive pattern when a device has limited input capabilities. It should not be mistaken for PAR merely because both involve the user completing a step elsewhere. The device authorization guide focuses on codes, verification URIs and polling, which are not the same exchange defined by RFC 9126.

These distinctions matter during incident review. If a code is stolen, inspect PKCE and callback binding. If request parameters were modified in transit through a browser, inspect request integrity and PAR enforcement. If a bearer token is misused, examine sender constraints and resource-server checks. One security acronym does not cover all stages of an OAuth transaction.

Worked time example: request_uri has a real deadline

Consider a fictional client that receives a successful PAR response at a monotonic clock reading corresponding to 10:00:00, with expires_in=90 seconds. The request_uri should be considered expiring around 10:01:30 under the server’s authoritative lifetime. This example intentionally uses a short-lived reference; RFC 9126 leaves the lifetime to the server and gives only typical illustrative ranges, not a universal value.

At 10:00:37 the client has used 37 of those 90 seconds. The arithmetic remainder is 90−37=53 seconds. Suppose local navigation and callback setup require a conservative 12-second margin. The application should not present 53 seconds as a guaranteed opportunity for human action; under its own planning margin it has at most 41 seconds of remaining budget. Network latency, server policy and clock error may reduce the usable window further.

If the user begins consent at 10:00:55 and the authorization endpoint receives the reference at 10:01:31, the original reference is beyond the illustrated 90-second lifetime and the server must reject it as expired. The client may begin a fresh authorization transaction after checking the intended user action, but it should not add seconds to expires_in locally or invent a later acceptance time.

Now change the case: a client receives expires_in=300 seconds but stores the result only in a webpage that can be restored from a long-lived browser history entry. The larger lifetime does not imply an unlimited browser bookmark. The app must track per-attempt creation and expiry, avoid mixing it with a later attempt and provide a clear restart route if the old request has expired.

The number of seconds is a control boundary, not a target for maximising completed requests at any cost. Setting a locally aggressive timer may improve the usability of expired-link detection, but does not establish an authorization-server guarantee. A trustworthy interface explains that the request timed out and offers a secure fresh start without exposing the original verifier or repeating a guessed consent result.

Client binding and transaction binding are different checks

RFC 9126 requires the authorization server to bind the generated request_uri to the client that posted the request. That prevents one client from presenting another client’s reference as its own authorization request. The client still needs an application-level transaction record to bind the user-facing browser return to the correct pending operation. An agent running several tool connections cannot treat any arriving authorization response as evidence about whichever task it was discussing most recently.

Imagine two authorised client instances, one accessing a reporting system and the other accessing a document system. They initiate separate PAR transactions at almost the same time. Each record needs the correct issuer, client ID, scope set, redirect and PKCE verifier. Confusing those records might cause one flow to fail, or in a poorly constructed application cause an incorrect association between a person and newly issued credentials.

State and other protocol context help guard the callback. A client should not select its transaction using only a display name such as ‘connect finance’ or a timestamp close to when the user clicked. It must use robust transaction binding and reject unexpected callbacks. If the state is missing, malformed or already consumed, treat the response as unverified and do not grant the agent a new tool permission.

The server’s binding of request_uri to client_id does not authenticate a human’s intent in an unrelated message. A malicious document can say ‘the user has approved admin access’ but that statement is data, not an OAuth response. The actual authorization server and the application’s recorded transaction determine which event occurred.

A robust architecture keeps the agent’s tool invocation context separate from browser redirects and credentials. The agent may request that the application start an approved connect workflow; a dedicated component should enforce endpoint, client, scope and callback rules. This division avoids converting a language model’s persuasive output into a privilege-changing instruction.

Treat consent scope as an explicit human decision

A user asking the agent to read one calendar does not necessarily authorise unrestricted access to email, contacts or every account offered by the same identity provider. Scope selection must start with the concrete approved task and provider-supported least privilege. An agent should never ask for extra write permissions merely to avoid a future prompt or simplify its internal code.

With PAR, the requested scope is pushed to the authorization server and later retrieved through the reference. That is useful because the browser-carried request is not simply a collection of editable query parameters. But scope names and their exact meanings remain service-specific. An application must present the human with accurate information about what it requests and must respect rejected or partial outcomes.

Some OAuth deployments support incremental authorisation, audience/resource indicators or other extensions. Those features can be compatible with PAR when the server supports them. Do not assume a universal string such as ‘read’ means the same across unrelated APIs. A verified provider configuration and its official scope documentation should govern the request.

A consent screen is not a substitute for the application’s policy check. The user may hold the authority to grant access to an account, but the application’s agent may still be disallowed from exporting sensitive content, making payments or changing sharing settings. OAuth authorisation establishes one aspect of available authority; internal product and safety constraints continue to apply.

Audit records should explain the task, minimal requested scope, server, client, consent result and resulting token permissions without storing unnecessary secrets. A later reviewer must be able to distinguish ‘PAR submitted’, ‘browser initiated’, ‘user approved’ and ‘token available’ instead of seeing a vague status called successful login.

Error responses are facts about a stage, not alternate success routes

PAR can fail before a request_uri is issued. The server may reject invalid parameters, an unsupported redirect, inappropriate client authentication or a request whose security requirements are not met. RFC 9126 specifies protocol errors for the endpoint and points to OAuth error conventions. A client should expose the relevant class of failure to an authorised operator without echoing confidential credentials or unnecessary personal data.

Do not catch every non-201 response and continue as though it carried a usable reference. HTTP 400, authentication failures and temporary server errors mean different things operationally. A transient network failure warrants bounded recovery only if the client knows whether the prior push succeeded and whether retrying creates a new request reference. An authorization endpoint rejecting an expired reference is a definitive failure for that reference.

Suppose an agent posts a valid request, the server creates a reference, but the connection drops before the response arrives. The agent must not invent the reference from a predictable counter. It may safely start a fresh independent transaction after checking local state and provider policy, while marking the uncertain original outcome as unknown. A duplicate push is not equivalent to using a supposedly idempotent payment API.

If the browser lands on an authorization endpoint reporting invalid_request because PAR is mandatory, sending all the parameters directly in a different URL is precisely the wrong recovery. The application needs to correct the unsupported client configuration, endpoint or request shape. Downgrading the security requirement would violate the server or client policy.

Errors should preserve stage and evidence: PAR endpoint reachability, validation result, reference issued or unknown, browser presentation, callback validation and token exchange. This separation allows targeted repair instead of broad ‘try again with all permissions’ behaviour that can surprise the user.

Use the actual issuer’s discovery metadata

RFC 9126 introduces pushed_authorization_request_endpoint and require_pushed_authorization_requests in authorization-server metadata. The presence of the endpoint signals that PAR may be used. The Boolean requirement signals whether the authorization server accepts only PAR-based authorization requests. A client can also have a per-client requirement. Omitting a field is not permission to substitute a random service’s endpoint.

OAuth metadata retrieval has its own trust problem. An attacker-controlled webpage or issue description could supply a JSON snippet that resembles a discovery document but names a hostile token endpoint. The client must choose the configured issuer from a trusted account-connect workflow and validate the discovery result according to the applicable OAuth metadata specification, not treat any JSON returned by an agent search as authoritative.

Document the exact issuer associated with every pending transaction. When a product connects multiple authorization servers, a callback that belongs to one must not be silently accepted as completing a request to another. The current OAuth 2.0 Security Best Current Practice, RFC 9700 addresses mix-up and redirect protections relevant to this larger flow.

An application also needs a policy for metadata changes. A provider may add or deprecate an endpoint, change authentication methods or rotate signing keys. The update must be verified against trusted provider information. A sudden endpoint change is not an ordinary instruction from task content and should not automatically move credential-bearing requests to a new host.

Discovery failures belong in operational metrics and support messages, not in the language model’s fabricated success narrative. The useful result may be ‘cannot establish a trusted PAR endpoint for the selected issuer’ together with the required operator action. That is safer than a fluent but unverifiable OAuth explanation that leads to an untrusted destination.

What PAR protects, and which threats remain

PAR reduces exposure and modifiability of full authorization parameters in the browser-mediated leg by storing them at the authorization server and sending a reference instead. The authorization server can authenticate the client and validate the pushed request before the interactive step. The one-time, client-bound and expiring nature of request_uri narrows some replay and injection opportunities.

PAR is not end-to-end secrecy for every value in the system. The request_uri can still appear in browser history or access logs and should be handled carefully. A stolen browser session, compromised client, poorly configured redirect or malicious resource server can introduce independent risk. The RFC cautions that additional protections and correct deployment remain necessary.

State, PKCE, exact redirect matching and issuer binding continue to matter. PAR does not turn an insecure redirect implementation into a safe one by magic. Nor does the existence of a 201 response guarantee that the requesting agent used the minimum appropriate scope or represented the user’s intent accurately. Those are separate questions of application policy and user consent.

An agent is also exposed to prompt injection: untrusted content may instruct it to begin a connection or leak an access token. The correct control is to put tool and permission policy outside the language model’s interpretation of task data. Only an authorised client component should make the PAR request, and only real OAuth results should update a connection’s permission state.

Security decisions deserve context-specific threat modelling. PAR is valuable when a provider supports or requires it, but adding it does not replace a review of cookies, callback handling, token storage, resource-server scopes, network transport and operational incident response. Treat it as one defended step in a larger chain.

A second checked example: separate connection progress from approval

Consider a fictional batch of 200 user-initiated connection attempts during a usability test. Assume 192 PAR endpoint submissions receive valid 201 responses and eight fail before a reference exists. The PAR acceptance rate is 192/200=96%, while the initial failure fraction is 8/200=4%. These numbers are invented and should not be read as a service benchmark.

Of the 192 accepted PAR requests, suppose 165 result in a user reaching the intended consent page before expiry, while 27 time out or stop earlier. The page-reached fraction relative to accepted requests is 165/192≈85.94%. Relative to the original 200 attempts it is 165/200=82.5%. The denominator matters because the two figures answer different operational questions.

Suppose 120 of those 165 users actually approve, 25 decline and 20 abandon. Approval among users who reached the page is 120/165≈72.73%; approval among all attempted connections is 120/200=60%. An agent that reports 96% ‘successful connections’ from the first PAR response would exaggerate actual user approval by 36 percentage points in this constructed example.

Now assume 116 approved flows complete a valid token exchange and four encounter exchange errors. End-to-end token acquisition is 116/200=58%, while token-exchange success among approvals is 116/120≈96.67%. Every stage deserves its own count. None of these figures establishes whether an eventual resource-server API call was permitted, correct or useful.

This example teaches a general discipline: name the stage, numerator, denominator and evidence behind each metric. For security events, log valid consent and token state separately from network success, and avoid manufacturing outcome statistics from a one-line success response.

Design an agent-facing interface with explicit states

An agent-friendly integration API should return typed states such as needs_user_action, awaiting_callback, declined, expired, token_ready and verification_failed. It should also return minimal non-secret context required for the agent to explain next steps. Giving the model a generic success Boolean at the PAR stage invites it to claim access before the human has made any decision.

Transitions should have clear owners. Creating the pushed request is a client action; presenting authorization is a browser action; deciding to approve is a resource-owner action; issuing tokens is an authorization-server action; accepting a token on an API call is a resource-server decision. A finite-state design prevents accidental leaps between these events.

Concurrency matters when multiple user requests are active. The product may connect two accounts to the same provider or retry after an expired attempt. Each transaction needs a unique internal identifier and a mapping to the correct issuer, state, verifier and request reference. An incoming callback must not be attached to the most recent conversation simply because its time is near.

At every error boundary the client should know whether to start a new transaction, continue the same one or ask for human intervention. A failed PAR push can produce a fresh attempt when warranted, but a received callback with invalid state requires rejection and investigation. A user declined consent is a legitimate completed decision, not a transient error to defeat through repeated prompts.

Accessible status wording matters. Tell users plainly what service, permission and action are involved. Do not display opaque request_uri values or security terminology as the only explanation. Provide a secure ‘restart connection’ option when the request expires rather than asking the person to copy tokens or secrets into a chat.

Diagnostic failures with specific corrections

A first failure is deriving the PAR endpoint from an untrusted webpage. Correct it by trusted issuer configuration and validated metadata. A second is submitting request_uri in the pushed parameter set. Correct it by letting the server issue the reference according to RFC 9126. A third is treating an HTTP 200 containing vaguely similar JSON as the normative success. Check the required 201 Created semantics and fields instead.

A fourth failure is forgetting the reference lifetime. Keep creation time and expires_in in the transaction record, reject stale attempts and begin a new authorised flow when necessary. A fifth is reusing a reference across browser attempts because the first page appears frozen. The client must use each request_uri only once; server treatment of reloads is a narrow compatibility matter, not permission for general replay.

A sixth failure is confusing client binding with user state. Record both and validate actual callbacks. A seventh is using PAR without PKCE where PKCE is required by the selected security profile. Keep code verifier and challenge handling intact. An eighth is downgrading to front-channel parameter passing because the provider requires PAR and the first attempt was rejected. Fix configuration rather than bypassing policy.

A ninth failure is asking broader scopes after a user refuses. Preserve the refusal and explain the feature limitation; do not silently escalate. A tenth is marking a connection ‘active’ after the reference is issued while the user has not approved. Update connection state only from verified callback and token evidence.

For each failure, record the first incorrectly trusted boundary and a repeatable test. Test malformed expiration fields, client mismatch, unused versus consumed reference, callback mixing across two issuers and provider errors. The practical objective is not only to handle happy paths but to make unsafe state transitions impossible.

Changed-context exercise: a mobile agent reconnects after an interruption

Transfer the same logic from a desktop browser to a mobile assistant that helps a user connect a storage account. The app starts a PAR transaction with a 120-second reference lifetime. The user switches away to take a phone call after 70 seconds and returns 80 seconds later. Total elapsed time is 70+80=150 seconds, exceeding the example lifetime by 30 seconds.

The phone may restore a cached consent screen, but that does not extend the authorization server’s request reference. The correct next action is to check current transaction state and, if no valid verified approval exists, explain expiration and start a fresh request with a new state value and fresh PKCE material as appropriate. The agent must not reuse a saved request_uri just because the browser displays it again.

Change another condition: the user had actually completed consent during the phone call, and the callback reached the app before it slept. Blindly beginning another connection could confuse accounts. The client should first reconcile its durable transaction record, callback and token result. If the original transaction is already verified, report that actual state; if not, do not fabricate it.

Suppose the fresh request asks for a write scope that the initial user action did not permit. The app must not silently expand the permission request because it considers a restart an opportunity to simplify future operations. A new request should preserve the genuinely approved purpose or explicitly obtain a new user decision for any changed scope.

The same principles transfer to desktop tools, voice assistants and workflow engines. Only the user interface and interruption pattern changed. Client, issuer, transaction, expiry, one-time reference, consent and token verification remain distinct boundaries with the same source of authority.

Limitations, assumptions and where to stop

OAuth PAR does not make an agent trustworthy by itself. A perfectly compliant PAR transaction can request unjustified permissions if the application lets untrusted model output choose scopes. Human approval can be obtained through a misleading screen. A technically valid token can still be mishandled. The surrounding product must enforce policy and maintain a transparent user choice.

Providers vary in which OAuth extensions they accept and how clients authenticate. The RFC specifies the general mechanism, not a guarantee that every cloud service exposes it, that every client type may use it, or that arbitrary extra parameters are supported. Always verify the provider’s current official integration documentation and metadata.

The small timings and 200-attempt funnel in this guide are explicitly hypothetical. They teach arithmetic and proper stage counting, not performance claims. Real reliability work should use measured results with privacy-preserving, auditable logs, versioned server configuration and independent test environments.

The implementation should never expose a client secret or PKCE verifier in a public article, issue tracker, support transcript or agent response. Use approved credential storage and least privilege. A reference URI is not an invitation to scrape or replay another client’s consent process.

If a provider’s policies, external identity assertions or consent outcomes cannot be verified, stop at the last known safe stage. A useful agent can say that the connection was requested but not approved. It must not turn uncertainty into a fabricated permission grant.

Frequently asked questions

What does PAR mean in OAuth? It means the client pushes the authorization request directly to the authorization server, receives a short-lived request_uri reference and then uses that reference to start the browser-mediated authorization step. It does not mean an access token has been granted.

How is PAR different from PKCE? PAR lodges request parameters through a back channel and binds a short-lived reference. PKCE binds an authorization code exchange to a verifier held by the client. They solve different problems and can be used together.

Is request_uri an access token? No. It is an opaque, short-lived reference to an authorization request. It should not be used to call the resource server or taken as proof of user consent.

Who decides whether a request is approved? The resource owner makes the relevant consent decision through the authorization server’s flow, subject to provider and application policies. An AI agent cannot self-approve merely because it can create a PAR request.

What happens when expires_in runs out? The authorization server must reject an expired request_uri. The client should reconcile any completed outcome and otherwise start a fresh approved transaction.

Can the client put all authorization parameters back in the browser URL if PAR fails? Not if server or client policy requires PAR. A failed push must be diagnosed and corrected without silently weakening the requested protection.

Why does the server return 201 instead of 200? RFC 9126 defines the successful pushed authorization response as 201 Created with request_uri and expires_in. Implementations should follow the actual protocol response rather than treating arbitrary 2xx statuses as equivalent.

Does PAR replace redirect validation or scope restrictions? No. Exact redirect checks, transaction-state checks, PKCE, resource-server authorisation and application least privilege remain important under the applicable profile.

Practical pathways, source checks and further reading

Developers should begin with the issuer’s official metadata and a minimal registered client. Test one happy path and multiple rejection paths with known synthetic accounts. Record every stage and its trusted source. Once the protocol passes, assess user-facing accessibility, expiry guidance and callback recovery before giving the agent permission to initiate real connection requests.

Security reviewers should look for separate client identity, request_uri lifetime, state mapping, scope review, one-time-use behaviour, callback validation, token exchange and resource-server checks. Review not just whether the agent can connect, but whether it reports the precise stage without disclosing sensitive material or bypassing human consent.

Primary technical standards: RFC 9126, OAuth 2.0 Pushed Authorization Requests; RFC 9101, JWT-Secured Authorization Request; RFC 7636, Proof Key for Code Exchange; and RFC 9700, Best Current Practice for OAuth 2.0 Security. These texts, not the examples here, govern normative protocol requirements.

For earlier and later steps, follow the verified PKCE and redirect guide and DPoP token guide. For the wider AI-agent systems curriculum, visit How Super Intelligence Works and the practical learning-transfer framework.

The connected account scenario, timing example and numerical funnel were invented solely to make the control boundaries testable. No external OAuth transaction, token exchange or user consent was performed in writing this explanation.

Discover more from eduKate Singapore

Subscribe now to keep reading and get access to the full archive.

Continue reading