feat: Add OpenID AuthZEN integration for fine-grained authorization (v1) #381
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
AuthZEN Integration v1 - Fine-Grained Authorization for SLIM
📖 Proposal
This PR implements iteration 1 of OpenID AuthZEN integration into SLIM, providing standards-based policy enforcement for agent operations beyond simple JWT claims.
🎯 Problem Statement
SLIM currently uses JWT-based authentication but lacks fine-grained authorization capabilities for:
🚀 Solution Overview
Complete AuthZEN v1 implementation providing policy-driven authorization for all SLIM operations:
Core Components Added
1. AuthZEN Client (
data-plane/core/auth/src/authzen.rs
)2. SLIM Service Integration (
data-plane/core/service/src/authzen_integration.rs
)AuthZenService
wrapper for seamless integrationAgent
→AuthZenSubject
AgentType
→AuthZenResource
authorize_route()
- Agent-to-agent route establishmentauthorize_publish()
- Message publishing with metadataauthorize_subscribe()
- Subscription permissions3. Comprehensive Demo (
data-plane/examples/src/authzen-demo/
)📊 Technical Details
Dependencies Added:
Error Handling:
Configuration:
🔧 Usage Example
🧪 Demo Application
Run the comprehensive demo:
Expected demo output: