Agentic Identity Protocols — OAuth 2.1, MCP, A2A, CIBA, OIDC-A, and the Delegation Chain Problem
There is no law of the land for agentic identity protocols — yet.
Anthropic proposed MCP for model-to-tool communication. Google proposed A2A for agent-to-agent communication. Microsoft ships Entra Agent ID. The OpenID Foundation is finalising an agentic identity whitepaper. The IETF has open drafts for SCIM agent schemas, token exchange, and delegation chains. The EU, India, the US, and UAE are each adding regulatory requirements on top.
The result is a fragmented landscape where a single enterprise AI agent may simultaneously use five different protocols — and where a question as simple as “did the user’s permission travel to the database?” has no standardised answer.
This post maps the full protocol landscape, explains how each protocol works, traces a concrete enterprise scenario through the full stack, and then frames what every stakeholder must understand before making implementation decisions.
The Protocol Landscape — What Exists Today
Before diving into each protocol, a map of the full stack is essential. Agentic identity protocols operate at different layers — authentication, tool access, agent communication, async approval, and identity claims — and none of them is a complete solution on its own. (By the time the blog was posted on 5th of June 2026)
flowchart TD
subgraph Auth["Authentication Layer"]
direction LR
OA["OAuth 2.1<br/>Baseline for all agent auth<br/>client_credentials · auth_code · PKCE<br/>IETF Draft RFC"]
mTLS["mTLS + DPoP<br/>Sender-constrained tokens<br/>Workload-to-workload<br/>FAPI 2.0 requirement"]
SPF["SPIFFE / SPIRE<br/>Cryptographic workload identity<br/>Short-lived SVIDs<br/>Kubernetes-native"]
end
subgraph Tool["Tool Access Layer"]
MCP["MCP (Anthropic, 2024)<br/>Model Context Protocol<br/>Agent → tool communication<br/>Streamable HTTP / stdio<br/>Auth: OAuth 2.1 + PKCE"]
end
subgraph AgentComm["Agent-to-Agent Layer"]
A2A["A2A (Google, 2025)<br/>Agent-to-Agent Protocol<br/>Structured task delegation<br/>Agent Cards for discovery<br/>Auth: partial — gaps remain"]
end
subgraph AsyncApproval["Async Approval Layer"]
CIBA["CIBA<br/>Client Initiated Backchannel Auth<br/>Out-of-band user approval<br/>Poll / Ping / Push modes<br/>OpenID Connect standard"]
end
subgraph Identity["Agent Identity Layer"]
OIDCA["OIDC-A (proposed 2025)<br/>OpenID Connect for Agents<br/>agent_model · agent_provider<br/>agent_instance_id claims<br/>Not yet mainstream"]
SCIM["SCIM Agent Schema<br/>draft-wahl-scim-agent-schema<br/>Lifecycle management for agents<br/>IETF Draft — not yet ratified"]
end
subgraph Delegation["Delegation Layer"]
OBO["OBO + Token Exchange<br/>RFC 8693<br/>sub + act claims in JWT<br/>User identity through agent chain<br/>Adoption still immature"]
BIS["Biscuits / Macaroons<br/>Offline scope attenuation<br/>Token holder creates sub-token<br/>No issuer round-trip needed"]
end
Auth --> Tool
Auth --> AgentComm
Auth --> AsyncApproval
Tool --> Delegation
AgentComm --> Delegation
style Auth fill:#1e3a5f,stroke:#3b82f6,color:#fff
style Tool fill:#1e4620,stroke:#22c55e,color:#fff
style AgentComm fill:#713f12,stroke:#f59e0b,color:#fff
style AsyncApproval fill:#1e3a5f,stroke:#3b82f6,color:#fff
style Identity fill:#4a1a1a,stroke:#94a3b8,color:#fff
style Delegation fill:#7f1d1d,stroke:#ef4444,color:#fff
The diagram reveals the architectural reality: green is production-ready, amber is available but with gaps, red is emerging. No protocol at the delegation layer is production-mature. Every cross-domain scenario — agent operating across organisations, agent delegating to sub-agent — sits in that red zone.
OAuth 2.1 — The Baseline Every Agent Must Use
OAuth 2.1 is not a new protocol — it is a consolidation of OAuth 2.0 best practices into a single, security-hardened specification. Every credible agent authentication pattern today builds on it.
What changed from OAuth 2.0:
| OAuth 2.0 | OAuth 2.1 |
|---|---|
| Implicit flow (token in URL fragment) | Removed — too risky |
| Resource Owner Password Credentials | Removed — passwords should never travel |
| PKCE(Proof Key for Code Exchange) optional | PKCE mandatory for all clients |
| Bearer tokens default | Sender-constrained tokens (DPoP(Demonstrating Proof of Possession) or mTLS(Mutual TLS)) required for high-security |
| No specific guidance on redirect URI matching | Exact match required |
How agents use OAuth 2.1:
Two grant types are relevant for agents:
-
client_credentials— for machine-to-machine communication where no user is present. An agent authenticates as itself and receives a token. This is appropriate when the agent is performing system-level tasks that do not represent a specific user’s delegated action. -
authorization_code + PKCE— when the agent is acting on behalf of a logged-in user. The user grants consent, the agent receives a token that carries the user’s identity. This is the correct pattern when user permissions must travel with the request.
The critical distinction: client_credentials does not carry user identity. If an agent uses client_credentials to access a database, the database sees the agent’s service identity, not the user’s identity. This is the root of the permission-propagation problem explored in the database scenario below.
MCP — How Agents Access Tools
The Model Context Protocol (MCP), published by Anthropic in late 2024, standardises how AI agents connect to external tools, data sources, and services. It is the most widely adopted agent connectivity standard available today.
MCP architecture:
flowchart LR
Host["Host Application<br/>Claude Desktop · Cursor IDE<br/>Enterprise chat platform"]
Client["MCP Client<br/>Embedded in Host<br/>Manages MCP connections<br/>OAuth 2.1 client identity"]
Server["MCP Server<br/>Tool / resource provider<br/>Exposes: Tools · Resources · Prompts<br/>Validates OAuth token"]
Tool["Downstream System<br/>Database · API · File Store<br/>CRM · Calendar · Code repo"]
Host --> Client
Client -->|"MCP protocol<br/>OAuth 2.1 Bearer token<br/>Streamable HTTP / stdio"| Server
Server -->|"Service credentials<br/>OR<br/>Token Exchange (future)"| Tool
style Host fill:#1e3a5f,stroke:#3b82f6,color:#fff
style Client fill:#1e3a5f,stroke:#3b82f6,color:#fff
style Server fill:#1e4620,stroke:#22c55e,color:#fff
style Tool fill:#713f12,stroke:#f59e0b,color:#fff
MCP defines two primitives:
- Tools — model-controlled functions that allow the agent to take actions (
create_ticket,run_query,send_email) - Resources — application-controlled, read-only data sources that provide context (
company_policies,product_catalogue)
The authentication gap MCP initially shipped without: The original MCP specification (November 2024) had no authentication mechanism. Community pressure and enterprise feedback led to the integration of OAuth 2.1 with PKCE as the standard in subsequent revisions. Any MCP deployment in an enterprise context must implement this; unauthenticated MCP is not acceptable for production systems.
The remaining gap: MCP authentication governs the agent-to-MCP-server relationship. What the MCP server does with the downstream tool (the database, the API) is not standardised. The MCP server typically uses its own service credentials for the downstream connection — the user’s identity does not automatically propagate. This is the core of the database problem described in the next section.
A2A — When Agents Talk to Each Other
Google’s Agent-to-Agent (A2A) Protocol (2025) addresses the communication layer when one agent needs to delegate a task to another agent, potentially operated by a different organisation.
Key A2A concepts:
- Agent Card: a metadata document (served at
/.well-known/agent.json) declaring an agent’s capabilities, supported modalities, and authentication requirements - Task lifecycle:
submitted → running → completed | failed | requires_input - Authentication: A2A specifies that agents must authenticate using standard OAuth 2.1 flows, but does not fully standardise what happens to authorization scope across agent boundaries
The authorization gap A2A leaves open:
When Agent A (in Organisation 1) delegates a task to Agent B (in Organisation 2), A2A defines how the communication happens. It does not define:
- How Agent B proves to Organisation 1’s resources that it is acting on behalf of the user who initiated the task
- Whether the permission scope narrows at the A2A boundary (scope attenuation)
- How Organisation 1 can revoke Agent B’s delegated authority in real time
This is why cross-domain agent delegation is the hardest unsolved problem in agentic identity: the communication protocol (A2A) and the identity/authorization protocol (OAuth 2.1) are separate, and their integration across trust boundaries is not yet standardised.
The Enterprise DB Scenario — All Protocols Intersecting
This is where the protocol complexity becomes tangible. Consider the question a business analyst types into their enterprise AI assistant:
“What were Q1 2026 sales for Product X across all regions?”
The agent must: understand the question → identify the right data source → generate a SQL query → execute it → return a formatted answer. Here is what actually happens at the protocol layer:
sequenceDiagram
participant U as Business Analyst
participant A as Primary Agent<br/>(LLM + orchestrator)
participant MCP as MCP Server<br/>(db-query-mcp)
participant IdP as Enterprise IdP<br/>(Okta / Entra)
participant V as Secrets Vault<br/>(HashiCorp / AWS)
participant DB as Snowflake<br/>/ Database
U->>A: "Q1 2026 sales for Product X?"
A->>IdP: Present OAuth token<br/>{ sub: analyst@company.com,<br/>scope: query:sales_data }
IdP->>A: Token validated ✓
A->>MCP: MCP tool call: run_sql_query<br/>Bearer: analyst's OAuth token
MCP->>MCP: Check token: does analyst<br/>have scope query:sales_data? ✓
MCP->>MCP: Generate SQL:<br/>SELECT region, SUM(amount)<br/>FROM sales WHERE product='X'<br/>AND quarter='Q1-2026'
Note over MCP,DB: Three credential patterns — only Pattern B carries user identity to DB
alt Pattern A: MCP service account (common today)
MCP->>DB: Connect using svc-db-mcp<br/>service account credentials
DB->>MCP: Result set (no user-level filtering)
else Pattern B: OAuth token exchange to Snowflake (correct)
MCP->>IdP: Exchange analyst token<br/>for Snowflake-scoped token
IdP->>MCP: Snowflake access token<br/>mapped to analyst's Snowflake role
MCP->>DB: Connect with analyst's<br/>Snowflake role — row-level<br/>security enforced by DB
DB->>MCP: Result set (filtered by role)
else Pattern C: Dynamic secret (no user-level auth)
MCP->>V: Request DB credential<br/>for sales_read_role
V->>MCP: Ephemeral username+password<br/>TTL: 15 minutes
MCP->>DB: Connect with dynamic credential<br/>(no user identity propagated)
DB->>MCP: Result set
end
MCP->>A: Result: { Q1_2026_sales: { north: ..., south: ... } }
A->>U: "Q1 2026 sales for Product X:<br/>North ₹6.2Cr, South ₹8.0Cr,<br/>Total ₹14.2Cr"
The three credential patterns explained:
Pattern A — MCP service account (what most deployments do today): The MCP server connects to Snowflake using its own service account. The user’s identity does not reach the database. Row-level security and column masking in Snowflake cannot be applied per user. The MCP server itself is responsible for enforcing what data to return based on the user’s OAuth scope. Risk: the MCP server becomes a single point of trust, and bugs in its permission logic expose data incorrectly.
Pattern B — OAuth token exchange to Snowflake (architecturally correct): Snowflake supports OAuth natively. The MCP server exchanges the user’s enterprise OAuth token for a Snowflake-scoped token. Snowflake maps the token to the analyst’s Snowflake role. Row-level security, dynamic data masking, and column-level permissions in Snowflake are enforced as they would be for a human analyst. The user’s permission genuinely travels to the database. This is the correct pattern but requires Snowflake OAuth configuration and an identity provider that supports token exchange (RFC 8693).
Pattern C — Dynamic secrets (good for credential hygiene, not for user-level auth):
HashiCorp Vault (or AWS Secrets Manager) generates a short-lived database credential on-demand. No static passwords exist. However, the dynamic credential maps to a Vault-defined role (e.g., sales_read_role), not to the specific user. User-level permissions are not enforced at the database layer. This pattern is excellent for eliminating static credentials but must be combined with Pattern B if user-level data access control is required.
The recommendation: Pattern B for regulated data (financial, health, PII). Pattern C for non-sensitive operational data. Pattern A only if the MCP server has robust, audited permission enforcement and the data does not require per-user access control.
The Delegation Chain Problem — How Permission Travels
The database scenario shows a single-hop delegation. Real enterprise agent workflows involve multiple hops — and this is where the protocol gaps become severe.
flowchart TB
User["Analyst<br/>{ sub: analyst@co.com }<br/>OAuth token issued by Okta<br/>scope: read:sales query:reports"]
AgentA["Primary Agent<br/>{ sub: analyst@co.com<br/> act: { sub: agent-orchestrator } }<br/>Token Exchange RFC 8693<br/>scope: read:sales query:reports"]
AgentB["Sub-Agent: Report Builder<br/>{ sub: analyst@co.com<br/> act: { sub: agent-orchestrator<br/> act: { sub: agent-report } } }<br/>Scope narrowed:<br/>query:reports only"]
API["Sales Report API<br/>Validates full act chain<br/>Applies analyst's data permissions<br/>Returns: only data analyst can see"]
User -->|"Delegates to"| AgentA
AgentA -->|"Delegates sub-task to<br/>Token Exchange → narrowed scope"| AgentB
AgentB -->|"Calls API with<br/>full delegation chain in token"| API
style User fill:#1e4620,stroke:#22c55e,color:#fff
style AgentA fill:#1e3a5f,stroke:#3b82f6,color:#fff
style AgentB fill:#713f12,stroke:#f59e0b,color:#fff
style API fill:#1e3a5f,stroke:#3b82f6,color:#fff
The act claim (RFC 8693):
When a token is exchanged to represent delegation, the resulting JWT carries nested identity via the act (actor) claim:
{
"sub": "analyst@company.com",
"act": {
"sub": "agent-orchestrator-id",
"act": {
"sub": "agent-report-builder-id"
}
},
"scope": "query:reports",
"exp": 1749600000
}
The resource server (Sales Report API) can read this chain and know: the analyst authorised this action, it was executed by the orchestrator agent, which delegated to the report-builder agent, and only query:reports scope was granted. This is a complete, auditable delegation chain — and it is what the industry currently lacks in most deployments.
Why this is not standard practice today:
- Token Exchange (RFC 8693) has limited adoption in enterprise IdPs
- Most agents today use
client_credentialsand act as themselves, not on behalf of a user - The
actclaim interpretation is not yet enforced by most resource servers - Sub-agent tokens are typically new
client_credentialsgrants, breaking the chain entirely
Scope attenuation with Biscuits:
Biscuits and Macaroons allow a token holder to create a more restricted version of their token without contacting the issuer. An orchestrator agent with scope: read:sales query:reports can mint a sub-token for a sub-agent with scope: query:reports only — offline, cryptographically verifiable, without a network round-trip. This enables secure, decentralised delegation in high-throughput agent pipelines where real-time authorization server contact is a bottleneck.
Human vs Agent vs Bot — The Identification Problem
When a request arrives at an API gateway, the gateway must classify the requester to apply the correct policy. This is not a binary human/machine question — it is a three-way classification with distinct governance implications.
flowchart TD
Request["Incoming Request<br/>API call to protected resource"]
H["Human User<br/>Interactive session<br/>Auth: OIDC / SAML / Passkey<br/>Token: id_token + access_token<br/>MFA enforced<br/>Session-bound"]
A["AI Agent<br/>Autonomous actor<br/>Auth: OAuth 2.1 client_credentials<br/>OR authorization_code + OBO<br/>Token: contains act claim<br/>Behaviour: consistent, non-interactive"]
B["Malicious Bot / Scraper<br/>Attempts to impersonate human or agent<br/>No valid OAuth client registration<br/>No MFA / no PKCE<br/>Anomalous patterns: high volume, odd timing"]
Request --> H
Request --> A
Request --> B
HS["Grant access<br/>Apply user-level policies<br/>MFA factor recorded"]
AS["Grant access if:<br/>1. Valid OAuth client registration<br/>2. Scope within consent boundary<br/>3. act claim chain intact<br/>Apply agent-level policies"]
BS["Reject / challenge<br/>Rate limit · CAPTCHA<br/>Web Bot Auth check<br/>Alert SIEM"]
H --> HS
A --> AS
B --> BS
style H fill:#1e4620,stroke:#22c55e,color:#fff
style A fill:#1e3a5f,stroke:#3b82f6,color:#fff
style B fill:#7f1d1d,stroke:#ef4444,color:#fff
style HS fill:#1e4620,stroke:#22c55e,color:#fff
style AS fill:#1e3a5f,stroke:#3b82f6,color:#fff
style BS fill:#7f1d1d,stroke:#ef4444,color:#fff
Detection signals at the token layer:
| Signal | Human | AI Agent | Malicious Bot |
|---|---|---|---|
| Grant type | authorization_code with MFA |
client_credentials OR authorization_code + OBO |
Stolen token, no valid grant |
act claim |
Absent | Present if OBO flow used | Absent (impersonation) |
agent_type claim (OIDC-A) |
Absent | Present (llm_agent) |
Absent |
| User-Agent header | Browser or mobile SDK | langchain/0.2, custom agent string |
curl, scraped browser UA |
| Request pattern | Irregular, human-speed | Consistent, programmatic | High-volume, irregular |
| Source IP | User’s device / corporate VPN | Fixed infrastructure IP | Variable, VPN/TOR |
| Interactive session | Yes — cookie + session | No | Attempts to simulate |
Web Bot Auth (IETF proposal, 2024) takes detection further: a legitimate agent can cryptographically sign its HTTP requests using HTTP Message Signatures, proving it is an identified, accountable agent — not an anonymous scraper. This allows the web server to distinguish between:
- “This is agent-orchestrator-v2 operated by Acme Corp (verified)” — grant access
- “This request has no agent identity assertion” — apply bot-blocking or challenge
Web Bot Auth is not yet an RFC but is gaining commercial traction with Cloudflare and Vercel actively contributing.
Regional Governance — The Regulatory Layer on Top
Protocols define the technical mechanism. Regulatory frameworks define the requirements those mechanisms must satisfy. These are not the same, and they vary significantly by geography.
| Region | Key Regulation | Protocol Implication |
|---|---|---|
| EU | EU AI Act Art. 14: human oversight for high-risk AI; GDPR Art. 22: automated decision restrictions | CIBA mandatory for decisions with legal significance; OBO act claims required for audit trails; scope must describe decisions not just data |
| India | DPDP Act 2023: consent-based personal data processing; RBI AI circular: human-in-loop for financial AI | Consent record must be in Indian jurisdiction; revocation must be near-real-time; financial agents require human override capability |
| US | NIST AI RMF: risk-based AI governance; SEC AI guidance: fiduciary AI must be explainable | No federal mandate on agent protocols yet; sector-specific requirements (healthcare: HIPAA, finance: FINRA) impose OBO and audit requirements |
| UAE / ME | UAE AI Strategy; DIFC Data Protection Law | More permissive than EU; agent deployment is actively encouraged; DIFC requires audit trails for data-touching agent actions |
| Global (FAPI 2.0) | Financial-grade API Security Profile | For any agent in financial services globally: mTLS or DPoP required (sender-constrained tokens); PKCE mandatory; PAR (Pushed Authorization Requests) required |
The practical consequence: a single enterprise deploying agents across EU, India, and the UAE must configure the same underlying protocols (OAuth 2.1, CIBA, OBO) to different compliance profiles depending on jurisdiction. This is why IPSIE (Interoperability Profiling for Secure Identity in the Enterprise), the OpenID Foundation working group, is developing enterprise security profiles for AI agents — a single technical specification that maps to the major regulatory frameworks.
CIBA and OIDC-A — What Is Being Built
CIBA in Agent Workflows
Client Initiated Backchannel Authentication was introduced in the consent post from a user perspective. From a protocol perspective, it fills a structural gap:
Long-running agent tasks cannot hold an interactive user session open. An agent processing an overnight compliance report cannot wait for the user to be logged in when it needs to approve an exception at 3 AM. CIBA provides a standardised mechanism:
- Agent sends a CIBA request to the authorization server:
POST /bc-authorizewithlogin_hint: analyst@company.comandbinding_message: "Agent needs to approve risk exception for vendor X" - IdP pushes a notification to the analyst’s registered device (mobile app, Microsoft Authenticator, etc.)
- Analyst approves or denies from their device
- Agent polls or receives a callback with the authorization decision
- Agent receives an access token (if approved) or handles the denial
This is the correct implementation of the EU AI Act’s “effective human oversight” requirement for high-risk decisions.
OIDC-A — Agent-Native Identity Claims
OpenID Connect for Agents (OIDC-A) (2025 proposal) extends OIDC’s identity token with agent-specific claims. Where a human’s id_token carries sub, email, name, an agent’s identity token would carry:
| Claim | Example Value | Purpose |
|---|---|---|
agent_type |
llm_agent |
Distinguishes agent from human or service account |
agent_model |
claude-sonnet-4-6 |
The specific model powering the agent |
agent_provider |
anthropic |
The model provider |
agent_version |
2.1.0 |
The agent application version |
agent_instance_id |
agent-uuid-abc123 |
Unique identifier for this agent instance |
These claims enable:
- Risk-based access control based on model version (e.g., deny access to a model known to have a jailbreak vulnerability)
- Audit trails that identify not just that an agent acted, but which model version made the decision
- Policy enforcement that differs by agent type (
llm_agentgets different scopes thanrpa_bot)
OIDC-A is not yet supported by any production IdP. Microsoft Entra Agent ID, Okta AIM, and WSO2’s agentic identity framework each implement proprietary equivalents. They do not interoperate.
What Every Stakeholder Must Consider
Protocol decisions are not only engineering decisions. They carry CapEx, OpEx, compliance, and audit implications.
| Stakeholder | What to Evaluate Before Implementation |
|---|---|
| Regulatory / Compliance | Which protocols satisfy your jurisdiction’s human-oversight requirements? CIBA is required for EU high-risk AI. OBO act claims are needed for GDPR-compliant audit trails. Verify before build. |
| Executive / CISO | Protocol fragmentation creates vendor lock-in risk. Proprietary agent identity (Entra Agent ID, Okta AIM) requires repeated integration work. Budget for standards convergence re-work in 18–24 months. |
| Auditor | Can the audit trail show: who authorised, which agent acted, which sub-agents were spawned, what the delegation chain was? If the answer is no, the protocol implementation is incomplete. |
| Implementor / IGA Team | Production-ready today: OAuth 2.1, MCP, CIBA. Drafts with no production support: SCIM agent schema, OIDC-A. Plan phased adoption: build on OAuth 2.1 now; layer OIDC-A when mainstream IdPs support it. |
| Administrator / Platform Team | Token lifetime strategy is a protocol decision with operational cost: shorter tokens mean more refreshes but smaller blast radius. MCP server credential management must be automated. CIBA notification delivery requires mobile push infrastructure. |
| User / Customer | CIBA is only useful if the user actually responds to approvals. Notification fatigue is a real failure mode. Design the agent’s CIBA triggers carefully — not every decision needs a push notification. |
| Developer | Choose MCP for tool access (standardised, production-ready). Use OAuth 2.1 authorization_code + PKCE + token exchange for user-delegated agent flows. Implement act claims from day one even if no consumer enforces them today — you will need the audit trail. Avoid client_credentials for any flow where the user’s permissions should govern the outcome. |
Implementation Decision Framework
Given the current state of standards, the pragmatic path for an enterprise deploying agents today:
flowchart TD
Start["Deploying AI Agents<br/>Which protocols do I need?"]
Q1{"Agent acts on<br/>behalf of a user?"}
Q2{"Actions cross<br/>org boundaries?"}
Q3{"Actions require<br/>human approval?"}
Q4{"Data source supports<br/>OAuth natively?"}
P1["Use OAuth 2.1<br/>client_credentials<br/>Scope to agent's own identity"]
P2["Use OAuth 2.1<br/>authorization_code + PKCE<br/>+ Token Exchange RFC 8693<br/>Implement act claim"]
P3["Use A2A for communication<br/>+ Token Exchange at each hop<br/>Watch for standards convergence<br/>on cross-domain delegation"]
P4["Implement CIBA<br/>Define risk tiers<br/>Only trigger for high-risk actions"]
P5["OAuth token exchange<br/>to data source (Pattern B)"]
P6["MCP Server as PEP<br/>Enforce user permissions in MCP<br/>Use dynamic secrets for credentials"]
Start --> Q1
Q1 -->|No| P1
Q1 -->|Yes| P2
P2 --> Q2
Q2 -->|Yes| P3
Q2 -->|No| Q3
Q3 -->|Yes| P4
Q3 -->|No| Q4
Q4 -->|Yes| P5
Q4 -->|No| P6
style P1 fill:#1e4620,stroke:#22c55e,color:#fff
style P2 fill:#1e4620,stroke:#22c55e,color:#fff
style P3 fill:#713f12,stroke:#f59e0b,color:#fff
style P4 fill:#713f12,stroke:#f59e0b,color:#fff
style P5 fill:#1e4620,stroke:#22c55e,color:#fff
style P6 fill:#713f12,stroke:#f59e0b,color:#fff
What Must Change — The Standards Gap
The gaps are known. The work is underway. The timeline is measured in years.
| Gap | Current State | What Is Being Built |
|---|---|---|
| Cross-domain agent delegation | No standard; A2A handles communication but not authorization across org boundaries | IETF Identity and Authorization Chaining Across Domains draft |
| Scope attenuation in chains | Biscuits/Macaroons exist but are not mainstream IAM toolkit items | Token Exchange RFC 8693 + offline attenuation; growing interest from platform teams |
| Agent identity claims | Every vendor proprietary (Entra Agent ID, Okta AIM, WSO2) | OIDC-A proposal; OpenID Foundation AI Identity Community Group |
| Agent lifecycle management | No standard provisioning / decommissioning | SCIM agent schema draft |
| Web agent identification | Bots and agents indistinguishable from humans at the HTTP layer | Web Bot Auth IETF proposal |
| Regulatory compliance profiles | Each organisation builds its own interpretation | IPSIE working group enterprise security profiles |
Security implications of these protocol gaps — what happens when an agent uses a misconfigured protocol, when a token is stolen from a delegation chain, or when a confused deputy attack exploits scope ambiguity — are the subject of the next post: Building Secure AI Agent Systems: A Practical Architecture Guide.
Key Takeaways
-
There is no single agentic identity standard today. OAuth 2.1 is the baseline. MCP governs tool access. A2A governs agent-to-agent communication. CIBA governs async approval. OIDC-A is a proposal. Each solves a different layer, and the integration across layers — especially at trust domain boundaries — is not yet standardised.
-
The enterprise database question has three answers, only one of which carries user permissions to the data source. OAuth token exchange to a database that supports OAuth natively (Pattern B) is architecturally correct. MCP-as-PEP (Pattern A) is practical but places all access control responsibility on the MCP server. Dynamic secrets (Pattern C) eliminate static credentials but do not propagate user identity.
-
The
actclaim in JWT (RFC 8693) is the mechanism for auditable delegation chains — but adoption is immature. Building it in from day one, even if no resource server enforces it today, preserves the audit trail you will need when regulators ask. -
Human vs agent vs bot detection requires signal analysis across token claims, authentication method, User-Agent headers, and behavioural patterns. Web Bot Auth adds cryptographic proof of agent identity at the HTTP layer. No single signal is definitive.
-
Regulatory requirements add protocol constraints that vary by jurisdiction. EU AI Act mandates CIBA for high-risk decisions. Indian DPDP mandates consent records within jurisdiction. FAPI 2.0 mandates sender-constrained tokens for financial agents globally. Build on OAuth 2.1 + PKCE + CIBA as the portable baseline.
-
Developer guidance: Use MCP for tool access. Use
authorization_code + PKCE + token exchangefor user-delegated flows. Implementactclaims. Avoidclient_credentialswhen user permissions must govern the outcome. Design for CIBA from the start. -
The convergence is coming. IPSIE profiles, OIDC-A, SCIM agent schema, and cross-domain token exchange drafts are all active. Build on open standards now, anticipate a 2-year window before these reach production maturity in mainstream IdPs.
Discussion
Powered by Giscus via GitHub Discussions. A GitHub account is required to comment.