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.
Statut du registre : UNPUBLISHED. Installez ce SDK uniquement depuis un checkout du code source du dépôt ; n’utilisez pas de registre de paquets externe.
L’authentification des requêtes accepte uniquement Bearer par défaut. Un cookie JWT détenu par l’application n’est lu que lorsque son nom exact est configuré. Le cookie Core opaque __Host-xid.rt.* n’est jamais recherché ni vérifié localement ; échangez-le en transférant le header Cookie complet vers le POST /v1/sessions/token de même origine exacte, avec les redirections désactivées, et n’acceptez qu’une réponse contenant uniquement le champ token.
Installer
# Gemfile
gem "xid", path: "../xid/sdk/ruby"
bundle installDé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}"
endAuthentifier 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
# Explicit same-origin Core session -> JWT exchange
token = Xid.exchange_session_token(
incoming_request_url: request.url,
cookie_header: request.get_header("HTTP_COOKIE")
)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
endConfiguration 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 |
disabled |
Nom du cookie JWT détenu par l’application ; désactivé sauf configuration explicite |
Notes de plateforme
- Dépend du gem
jwt(support ES256/RS256). Ruby 3.1+ requis. Xid.authenticate_requestaccepte à la fois un hash env Rack et unobjetRequestRack.- Hiérarchie d’exceptions :
Xid::Error->ConfigurationError,JwksError,TokenVerificationError,WebhookVerificationError.