-
Notifications
You must be signed in to change notification settings - Fork 11
Description
OpenID AuthZEN Integration for Fine-Grained Authorization
Author: @embesozzi
Status: Draft
Type: Feature Proposal
Created: 2026-02-02
Abstract
This proposal introduces OpenID AuthZEN as an optional fine-grained authorization (FGA) mechanism for the Model Context Protocol (MCP). AuthZEN is a specification developed by the OpenID Foundation AuthZEN Working Group and has been approved as an official version 1.0 specification. It standardizes communication between Policy Enforcement Points (PEPs) and Policy Decision Points (PDPs). This integration enables MCP deployments to externalize authorization decisions to standards-compliant PDPs, supporting multiple authorization models including relationship-based access control (ReBAC), policy-based access control (PBAC), and attribute-based access control (ABAC).
The proposal is fully backward compatible with existing MCP authorization mechanisms and operates as a complementary layer to OAuth 2.1 token validation.
Motivation
Current MCP authorization relies on OAuth 2.1 with scope-based access control. While effective for coarse-grained authorization (CGA), this approach presents limitations for enterprise deployments requiring fine-grained authorization:
Limitations of Scope-Based Authorization
-
Coarse Granularity: OAuth scopes operate at broad permission levels (e.g.,
read,write) rather than resource-specific or operation-specific access decisions. -
Static Authorization: Scopes are determined at token issuance time and cannot adapt to runtime context such as resource attributes, environmental factors, or dynamic policy changes.
-
Limited Policy Expression: Complex authorization requirements, such as "analysts may approve expenses up to $10,000 in their assigned department", cannot be expressed through OAuth scopes alone.
-
Centralized Policy Management: Without externalized authorization, policy logic becomes embedded in application code across multiple MCP Servers, creating maintenance complexity and inconsistent enforcement.
OpenID AuthZEN as a Solution
AuthZEN addresses these limitations by providing:
- A standardized interface for authorization decisions
- Support for multiple authorization models (ReBAC, PBAC, ABAC)
- Externalized policy management enabling centralized governance
- Runtime context evaluation for dynamic authorization decisions
Specification Overview
Integration Point
AuthZEN enables MCP deployments to externalize fine-grained authorization decisions to a Policy Decision Point (PDP). The core concept is straightforward: the MCP Server or MCP Gateway acts as a Policy Enforcement Point (PEP) that queries an external AuthZEN-compliant PDP before allowing operations to proceed.
flowchart LR
subgraph MCP["MCP Layer"]
Server["MCP Server / MCP Gateway<br/>(AuthZEN PEP)"]
end
subgraph AuthZEN["Authorization Layer"]
PDP["AuthZEN PDP"]
end
Server -->|"Evaluation Request"| PDP
PDP -->|"Decision Response"| Server
The PEP sends an Evaluation Request containing information about the subject, resource, and action. The PDP evaluates this request against its policies and returns a Decision Response indicating whether the operation should be allowed or denied.
This pattern decouples authorization logic from application code, enabling:
- Centralized policy management across multiple MCP Servers
- Dynamic policy updates without code changes
- Consistent enforcement of complex authorization rules
- Support for multiple authorization models (ReBAC, PBAC, ABAC)
Authorization Flow
This section describes the standard AuthZEN authorization architecture followed by an MCP-specific implementation example.
AuthZEN Authorization Architecture
The AuthZEN specification defines a protocol-agnostic pattern for authorization decisions. The following sequence diagram illustrates the standard flow where an MCP Server or MCP Gateway acts as the Policy Enforcement Point (PEP):
sequenceDiagram
participant App as MCP Host
participant Gateway as MCP Server / MCP Gateway<br/>(AuthZEN PEP)
participant PDP as AuthZEN PDP
participant Backend as API
App->>Gateway: Sends request
Gateway->>Gateway: Authenticate Request
Gateway->>Gateway: Extract details<br/>(subject, method, resource)
Gateway->>PDP: Sends AuthZEN request
PDP->>PDP: Evaluates policy
PDP-->>Gateway: Returns allow/deny decision
alt Allow
Gateway->>Backend: Forwards request
Backend-->>Gateway: Returns response
Gateway-->>App: Returns response
else Deny
Gateway-->>App: Returns 403 Forbidden
end
The key steps in this architecture are:
- Request Reception: The gateway receives an incoming request from the application
- Authentication: The gateway authenticates the request using the configured mechanism
- Context Extraction: Subject, resource, and action details are extracted from the request context
- AuthZEN Evaluation: The PEP sends an evaluation request to the AuthZEN PDP
- Policy Evaluation: The PDP evaluates the request against configured policies
- Decision Enforcement: The PEP enforces the decision-forwarding the request on allow, or returning 403 Forbidden on deny
MCP Implementation Example
Note: The flow described below is non-normative and represents a proposed integration approach for MCP deployments that use OAuth 2.1 for authentication. See MCP-Specific Mapping Example for additional considerations on subject sources and PDP capabilities.
In MCP deployments using OAuth 2.1, AuthZEN operates after OAuth token validation, functioning as a complementary authorization layer. The following sequence diagram illustrates the complete authorization flow for an MCP tools/call request:
sequenceDiagram
participant Client as MCP Client
participant Server as MCP Server / Gateway<br/>(PEP)
participant PDP as AuthZEN PDP
Client->>Server: POST /mcp (tools/call)<br/>Authorization: Bearer <token>
Server->>Server: Validate OAuth Token
alt Token Invalid
Server-->>Client: HTTP 401 Unauthorized
end
Server->>Server: Extract subject from JWT claims
Server->>Server: Extract resource/action from MCP request
Server->>Server: Build AuthZEN Evaluation Request
Server->>PDP: POST /access/v1/evaluation
PDP->>PDP: Evaluate policies
PDP-->>Server: {"decision": true|false}
alt Decision: true
Server->>Server: Execute MCP method
Server-->>Client: JSON-RPC Response
else Decision: false
Server-->>Client: HTTP 403 Forbidden
end
The key steps are:
- Token Validation: The MCP Server validates the OAuth token (existing behavior)
- Context Extraction: Subject information is extracted from JWT claims; resource and action from the MCP request
- AuthZEN Query: The PEP sends an evaluation request to the PDP
- Policy Evaluation: The PDP evaluates the request against configured policies
- Decision Enforcement: The PEP enforces the decision (proceed or deny)
AuthZEN Evaluation Request
The AuthZEN specification defines an evaluation request containing four primary components:
| Component | Description |
|---|---|
subject |
The entity requesting access (user, service, agent) |
resource |
The target of the access request |
action |
The operation being performed |
context |
Additional contextual information |
Request Structure
{
"subject": {
"type": "<subject_type>",
"id": "<subject_identifier>",
"properties": {}
},
"resource": {
"type": "<resource_type>",
"id": "<resource_identifier>",
"properties": {}
},
"action": {
"name": "<action_name>",
"properties": {}
},
"context": {}
}MCP-Specific Mapping Example
Important: The mapping described below is non-normative and provided as an illustrative example. The OpenID Foundation AuthZEN Working Group intends to define an AuthZEN Profile for MCP to standardize this mapping as an extension of the AuthZEN specification.
Other considerations:
- Subject sources are flexible: In this example, subject information is derived from OAuth Access Token (JWT claims). This is not required-subject information can be obtained from other sources depending on the deployment architecture.
- PDP data sources: The AuthZEN PDP is not limited to the data provided in the evaluation request. The PDP can retrieve and incorporate external data sources (e.g., user directories, relationship graphs, resource metadata) when making policy decisions.
For MCP tools/call requests, the evaluation request could be constructed as follows:
Subject (derived from JWT claims):
type:"user"or"identity"id: Value fromsuborpreferred_usernameclaimproperties: Additional claims such asroles,tenant,acr(authentication context class reference),amr(authentication methods references)
Resource:
type:"mcp-tool"or application-specific typeid: MCP namespace or resource scope (e.g.,"mcp:expenses")
Action (derived from MCP request):
name: Tool name fromparams.nameproperties: Tool arguments fromparams.arguments
Example: MCP Tool Invocation
Given the following MCP request:
{
"jsonrpc": "2.0",
"id": "request_12345",
"method": "tools/call",
"params": {
"name": "fintech_approve_expense",
"arguments": {
"expense_id": "exp-123",
"amount": 5000
}
}
}And a JWT containing:
{
"sub": "xxxxx",
"preferred_username": "embesozzi",
"realm_access": {
"roles": ["analyst"]
},
"organization": "finance-dept",
"acr": "inherence",
"amr": ["passkeys"]
}The AuthZEN evaluation request would be:
{
"subject": {
"type": "user",
"id": "embesozzi",
"properties": {
"roles": ["analyst"],
"tenant": "finance-dept",
"acr": "inherence",
"amr": ["passkeys"]
}
},
"resource": {
"type": "mcp-tool",
"id": "mcp:expenses"
},
"action": {
"name": "fintech_approve_expense",
"properties": {
"expense_id": "exp-123",
"amount": 5000
}
}
}AuthZEN Evaluation Response
The PDP returns a decision:
{
"decision": true
}Or:
{
"decision": false
}When decision is true, the MCP Server proceeds with request execution. When decision is false, the MCP Server MUST return HTTP 403 Forbidden.
Benefits
| Benefit | Description |
|---|---|
| Standardization | AuthZEN provides a vendor-neutral interface, avoiding PDP lock-in |
| Externalized Authorization | Policy decisions decoupled from application code |
| Fine-Grained Access Control | Support for ReBAC, PBAC, ABAC, or hybrid models |
| Policy as Code | Policies managed as versioned artifacts with audit trails |
| Centralized Governance | Consistent policy enforcement across MCP deployments |
| Dynamic Authorization | Runtime evaluation of context-aware policies |
| Interoperability | Compatible with any AuthZEN-compliant PDP |
Relationship to MCP Authorization Extensions
This proposal aligns with the MCP ext-auth extension framework principles, and I can open a ticket there to provide implementation guidance and reference configurations.
Open Questions
-
Community Interest: Is the MCP community open to evaluating the addition of AuthZEN as a standardized mechanism for fine-grained authorization in MCP deployments?
-
Formalization in ext-auth: Should this proposal be formalized as an official MCP authorization extension in the
ext-authrepository?
References
This is the first iteration of this proposal, covering only the authorization API. If there is interest, I can clarify any questions and provide implementation examples demonstrating AuthZEN integration with MCP and MCP apps to the community.