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", **options) ⇒ JwtToken

Initialize JWT strategy

Parameters:

  • secret (String)

    the secret key for JWT verification

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

    the JWT algorithm (default: HS256)

  • options (Hash)

    additional JWT verification options

Raises:

  • (LoadError)


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

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

  @secret = secret
  @algorithm = algorithm
  @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



74
75
76
# File 'lib/vector_mcp/security/strategies/jwt_token.rb', line 74

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



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/vector_mcp/security/strategies/jwt_token.rb', line 38

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

  begin
    decoded = JWT.decode(token, @secret, true, @options)
    payload = decoded[0] # First element is the payload
    headers = decoded[1] # Second element is the headers

    # Return user info from JWT payload
    {
      **payload,
      strategy: "jwt",
      authenticated_at: Time.now,
      jwt_headers: headers
    }
  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



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

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