Class: VectorMCP::Security::Strategies::JwtToken

Inherits:
Object
  • Object
show all
Defined in:
lib/vector_mcp/security/strategies/jwt_token.rb

Overview

JWT Token authentication strategy Provides stateless authentication using JSON Web Tokens

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(secret:, algorithm: "HS256", allow_query_params: false, **options) ⇒ JwtToken

Initialize JWT strategy

Parameters:

  • secret (String)

    the secret key for JWT verification

  • algorithm (String) (defaults to: "HS256")

    the JWT algorithm (default: HS256)

  • allow_query_params (Boolean) (defaults to: false)

    whether to accept JWT tokens from query parameters (default: false)

  • options (Hash)

    additional JWT verification options

Raises:

  • (LoadError)


22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/vector_mcp/security/strategies/jwt_token.rb', line 22

def initialize(secret:, algorithm: "HS256", allow_query_params: false, **options)
  raise LoadError, "JWT gem is required for JWT authentication strategy" unless defined?(JWT)

  @secret = secret
  @algorithm = algorithm
  @allow_query_params = allow_query_params
  @options = {
    algorithm: @algorithm,
    verify_expiration: true,
    verify_iat: true,
    verify_iss: false,
    verify_aud: false
  }.merge(options)
end

Instance Attribute Details

#algorithmObject (readonly)

Returns the value of attribute algorithm.



15
16
17
# File 'lib/vector_mcp/security/strategies/jwt_token.rb', line 15

def algorithm
  @algorithm
end

#optionsObject (readonly)

Returns the value of attribute options.



15
16
17
# File 'lib/vector_mcp/security/strategies/jwt_token.rb', line 15

def options
  @options
end

#secretObject (readonly)

Returns the value of attribute secret.



15
16
17
# File 'lib/vector_mcp/security/strategies/jwt_token.rb', line 15

def secret
  @secret
end

Class Method Details

.available?Boolean

Check if JWT gem is available

Returns:

  • (Boolean)

    true if JWT gem is loaded



67
68
69
# File 'lib/vector_mcp/security/strategies/jwt_token.rb', line 67

def self.available?
  defined?(JWT)
end

Instance Method Details

#authenticate(request) ⇒ Hash, false

Authenticate a request using JWT token

Parameters:

  • request (Hash)

    the request object

Returns:

  • (Hash, false)

    decoded JWT payload or false if authentication failed



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/vector_mcp/security/strategies/jwt_token.rb', line 40

def authenticate(request)
  token = extract_token(request)
  return false unless token

  begin
    decoded = JWT.decode(token, @secret, true, @options)
    decoded[0]
  rescue JWT::ExpiredSignature, JWT::InvalidIssuerError, JWT::InvalidAudienceError,
         JWT::VerificationError, JWT::DecodeError, StandardError
    false # Token validation failed
  end
end

#generate_token(payload, expires_in: 3600) ⇒ String

Generate a JWT token (utility method for testing/development)

Parameters:

  • payload (Hash)

    the payload to encode

  • expires_in (Integer) (defaults to: 3600)

    expiration time in seconds from now

Returns:

  • (String)

    the generated JWT token



57
58
59
60
61
62
63
# File 'lib/vector_mcp/security/strategies/jwt_token.rb', line 57

def generate_token(payload, expires_in: 3600)
  exp_payload = payload.merge(
    exp: Time.now.to_i + expires_in,
    iat: Time.now.to_i
  )
  JWT.encode(exp_payload, @secret, @algorithm)
end