Aller au contenu

sdk/ruby

SDK serveur Ruby pour la vérification JWT sans réseau, l'authentificationdes requêtes Rack/Rails et la validation des signatures webhook.

Afficher en Markdown

Statut

Implémenté et vérifié localement. La vérification aller-retour avec unvrai IdP (récupération JWKS, signature/vérification de jeton contre uneinstance XID active) n’a pas encore été effectuée et doit être complétéeavant toute utilisation en production.

Installer

# Gemfile
gem "xid"

bundle install

Démarrage rapide

require "xid"

Xid.configure do |c|
  c.issuer         = "https://xid.dev"
  c.audience       = "your_client_id"
  c.webhook_secret = "whsec_AbCdEf..."
end

# Verify a token
begin
  claims = Xid.verify_token(raw_token)
  puts claims.sub    # => "usr_abc123"
  puts claims.scope  # => "openid profile email"
rescue Xid::TokenVerificationError => e
  puts "Token invalid: #{e.message}"
end

Authentifier une requête Rack/Rails

# Sinatra before-filter
before do
  auth = Xid.authenticate_request(request)
  halt 401, "Unauthorized" unless auth.signed_in?
  @current_user_id = auth.claims.sub
end

# Rack middleware (env-based)
auth = Xid.authenticate_request(env)
unless auth.signed_in?
  return [401, { "Content-Type" => "application/json" },
          [JSON.generate({ error: auth.reason })]]
end

Vérifier le webhook

# Rails controller action
def receive
  raw_body = request.raw_post
  payload = Xid.verify_webhook(request.headers.to_h, raw_body)
  handle_event(payload["type"], payload["data"])
  head :ok
rescue Xid::WebhookVerificationError
  head :bad_request
end

Configuration multi-émetteur

config_a = Xid::Configuration.new
config_a.issuer   = "https://tenant-a.xid.dev"
config_a.audience = "client_a"
client_a = Xid::Client.new(config_a)
claims = client_a.verify_token(token)

Options de configuration

Clé Défaut Description
issuer https://xid.dev URL d’émetteur OIDC
audience nil Revendication aud attendue ; nil ignore la validation
jwks_ttl 3600 TTL du cache JWKS local en secondes
leeway 60 Tolérance au décalage d’horloge JWT en secondes
webhook_secret nil Secret de signature webhook avec le préfixe whsec_
webhook_tolerance 300 Fenêtre de relecture des webhooks en secondes
cookie_name __xid_token Clé de cookie pour l’extraction du jeton d’accès

Notes de plateforme

  • Dépend du gem jwt (support ES256/RS256). Ruby 3.1+ requis.
  • Xid.authenticate_request accepte à la fois un hash env Rack et unobjet Request Rack.
  • Hiérarchie d’exceptions : Xid::Error -> ConfigurationError,JwksError, TokenVerificationError,WebhookVerificationError.
Navigation

Saisissez votre recherche...

Utilisez les touches fléchées pour naviguerAppuyez sur Entrée pour sélectionnerAppuyez sur Échap pour fermer