Saltar al contenido

sdk/ruby

SDK de servidor Ruby para verificación JWT sin llamadas de red, autenticación de solicitudes Rack/Rails y validación de firma de webhook.

Ver como Markdown

Estado

Implementado y verificado localmente. La verificación de ida y vuelta contra un IdP real (obtención de JWKS, firma/verificación de tokens contra una instancia XID en producción) aún no se ha realizado y debe completarse antes del uso en producción.

Estado del registro: UNPUBLISHED. Instala este SDK únicamente desde el checkout del código fuente del repositorio; no uses un registro de paquetes externo.

La autenticación de solicitudes acepta solo Bearer de forma predeterminada. Una cookie JWT propiedad de la aplicación solo se lee cuando se configura su nombre exacto. La cookie opaca de Core __Host-xid.rt.* nunca se busca ni se verifica localmente; intercámbiala reenviando el header Cookie completo al POST /v1/sessions/token del mismo origen exacto, con las redirecciones desactivadas, y acepta solo una respuesta que contenga únicamente el campo token.

Instalación

# Gemfile
gem "xid", path: "../xid/sdk/ruby"

bundle install

Inicio rápido

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

Autenticar una solicitud 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")
)

Verificar 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

Configuración multi-emisor

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)

Opciones de configuración

Clave Por defecto Descripción
issuer https://xid.dev URL del emisor OIDC
audience nil Claim aud esperado; nil omite la validación
jwks_ttl 3600 TTL del caché local de JWKS en segundos
leeway 60 Tolerancia de desfase de reloj JWT en segundos
webhook_secret nil Secreto de firma del webhook con prefijo whsec_
webhook_tolerance 300 Ventana de repetición del webhook en segundos
cookie_name disabled Nombre de cookie JWT propiedad de la aplicación; desactivado salvo configuración explícita

Notas de plataforma

  • Requiere la gema jwt (soporte ES256/RS256). Se necesita Ruby 3.1+.
  • Xid.authenticate_request acepta tanto un hash de entorno Rack como un objeto Request de Rack.
  • Jerarquía de excepciones: Xid::Error -> ConfigurationError, JwksError, TokenVerificationError, WebhookVerificationError.
Navegación

Escribe para buscar...

Usa las flechas para navegarPulsa Intro para seleccionarPulsa Escape para cerrar