class RubyLLM::MCP::Auth::Flows::ClientCredentialsFlow
Used for application authentication without user interaction
Orchestrates OAuth 2.1 Client Credentials flow
def execute(server_url, redirect_uri, scope)
-
(Token)- access token
Parameters:
-
scope(String, nil) -- requested scope -
redirect_uri(String) -- redirect URI (used for registration only) -
server_url(String) -- MCP server URL
def execute(server_url, redirect_uri, scope) logger.debug("Starting OAuth client credentials flow") # 1. Discover authorization server server_metadata = discoverer.discover(server_url) raise Errors::TransportError.new(message: "OAuth server discovery failed") unless server_metadata # 2. Register client (or get cached client) with client credentials grant client_info = client_registrar.get_or_register( server_url, server_metadata, :client_credentials, redirect_uri, scope ) # 3. Validate that we have a client secret unless client_info.client_secret raise Errors::TransportError.new( message: "Client credentials flow requires client_secret" ) end # 4. Exchange client credentials for token token = token_manager.exchange_client_credentials( server_metadata, client_info, scope, server_url ) # 5. Store token storage.set_token(server_url, token) logger.info("Client credentials authentication completed successfully") token end
def initialize(discoverer:, client_registrar:, token_manager:, storage:, logger:)
def initialize(discoverer:, client_registrar:, token_manager:, storage:, logger:) @discoverer = discoverer @client_registrar = client_registrar @token_manager = token_manager @storage = storage @logger = logger end