Class: VectorMCP::Security::Middleware
- Inherits:
-
Object
- Object
- VectorMCP::Security::Middleware
- Defined in:
- lib/vector_mcp/security/middleware.rb
Overview
Security middleware for request authentication and authorization Integrates with transport layers to provide security controls
Instance Attribute Summary collapse
-
#auth_manager ⇒ Object
readonly
Returns the value of attribute auth_manager.
-
#authentication_rate_limiter ⇒ Object
Returns the value of attribute authentication_rate_limiter.
-
#authorization ⇒ Object
readonly
Returns the value of attribute authorization.
Instance Method Summary collapse
-
#authenticate_request(request, strategy: nil) ⇒ SessionContext
Authenticate a request and return session context.
-
#authorize_action(session_context, action, resource) ⇒ Boolean
Check if a session is authorized for an action on a resource.
-
#initialize(auth_manager, authorization) ⇒ Middleware
constructor
Initialize middleware with auth components.
-
#process_request(request, action: :access, resource: nil) ⇒ Hash
Process a request through the complete security pipeline.
-
#security_enabled? ⇒ Boolean
Check if security is enabled.
-
#security_status ⇒ Hash
Get security status for debugging/monitoring.
Constructor Details
#initialize(auth_manager, authorization) ⇒ Middleware
Initialize middleware with auth components
14 15 16 17 |
# File 'lib/vector_mcp/security/middleware.rb', line 14 def initialize(auth_manager, ) @auth_manager = auth_manager @authorization = end |
Instance Attribute Details
#auth_manager ⇒ Object (readonly)
Returns the value of attribute auth_manager.
8 9 10 |
# File 'lib/vector_mcp/security/middleware.rb', line 8 def auth_manager @auth_manager end |
#authentication_rate_limiter ⇒ Object
Returns the value of attribute authentication_rate_limiter.
9 10 11 |
# File 'lib/vector_mcp/security/middleware.rb', line 9 def authentication_rate_limiter @authentication_rate_limiter end |
#authorization ⇒ Object (readonly)
Returns the value of attribute authorization.
8 9 10 |
# File 'lib/vector_mcp/security/middleware.rb', line 8 def @authorization end |
Instance Method Details
#authenticate_request(request, strategy: nil) ⇒ SessionContext
Authenticate a request and return session context
23 24 25 26 27 28 29 30 31 |
# File 'lib/vector_mcp/security/middleware.rb', line 23 def authenticate_request(request, strategy: nil) request_context = rate_limit_request_context(request) @authentication_rate_limiter&.check!(request_context) if request_context auth_result = @auth_manager.authenticate(request, strategy: strategy) session_context = SessionContext.from_auth_result(auth_result) update_rate_limit(request_context, session_context) session_context end |
#authorize_action(session_context, action, resource) ⇒ Boolean
Check if a session is authorized for an action on a resource
38 39 40 41 42 43 44 |
# File 'lib/vector_mcp/security/middleware.rb', line 38 def (session_context, action, resource) # Always allow if authorization is disabled return true unless @authorization.required? # Check authorization policy @authorization.(session_context.user, action, resource) end |
#process_request(request, action: :access, resource: nil) ⇒ Hash
Process a request through the complete security pipeline
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/vector_mcp/security/middleware.rb', line 51 def process_request(request, action: :access, resource: nil) # Step 1: Authenticate the request session_context = authenticate_request(request) # Step 2: Check if authentication is required but failed if @auth_manager.required? && !session_context.authenticated? return { success: false, error: "Authentication required", error_code: "AUTHENTICATION_REQUIRED", session_context: session_context } end # Step 3: Check authorization if resource is provided if resource && !(session_context, action, resource) return { success: false, error: "Access denied", error_code: "AUTHORIZATION_FAILED", session_context: session_context } end # Step 4: Success { success: true, session_context: session_context } end |
#security_enabled? ⇒ Boolean
Check if security is enabled
84 85 86 |
# File 'lib/vector_mcp/security/middleware.rb', line 84 def security_enabled? @auth_manager.required? || @authorization.required? end |
#security_status ⇒ Hash
Get security status for debugging/monitoring
90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/vector_mcp/security/middleware.rb', line 90 def security_status { authentication: { enabled: @auth_manager.required?, strategies: @auth_manager.available_strategies, default_strategy: @auth_manager.default_strategy, rate_limit: @authentication_rate_limiter&.status || { enabled: false } }, authorization: { enabled: @authorization.required?, policy_types: @authorization.policy_types } } end |