Help Instance Help

Security and Go-Live Checklist

What Ragty guarantees

  • Only your sites. The iframe can only be framed by the share's allowed origins (frame-ancestors); the chat API answers web-component calls only for allowed origins (exact CORS allowlist, never *).

  • Only your application issues delegated sessions. Tickets require your gateway key and a valid assertion from your registered issuer.

  • No session hijacking. Sessions live only in browser memory, expire after 10 minutes and are bound to share, user, origin, integration type and a non-exportable device key; every request is signed and each signature is accepted once. Tickets are single-use, valid for 60 seconds and bound to one component instance. Public visitor cookies are HttpOnly, partitioned and rotated; replaying an old cookie blocks the visitor.

  • Isolation. Each visitor or user sees only their own chats; delegated users only their own (and shared) documents; public chats never see owned documents. Histories are stored by Ragty, not supplied by the browser.

  • Abuse limits. Rate limits per IP and per user, visitor creation limits, daily quota and maximum question length per share.

  • Privacy. Only a hash of the user's sub is stored. Histories are deleted after the retention period; erasing a user in Ragty erases their chats.

Your responsibilities

Area

Requirement

Gateway key

Server-side only, stored in a secret manager, rotated regularly, never in browser code, mobile apps, logs or repositories

Ticket endpoint

Requires the user's session and CSRF protection; mints the assertion only for the session user; never accepts a user ID from the request

Assertion

sub immutable and identical to the ingestion subject; lifetime ≤ 5 minutes; dedicated signing key; JWKS over HTTPS

Origins

Register only origins you control; one share per environment

Your page

No untrusted third-party scripts on pages with the web component (they share the page's JavaScript context). If you cannot guarantee that, use the iframe.

CSP

Allow only the Ragty origin in script-src/connect-src/frame-src; keep the integrity attribute if you pin versions

Logging

Never log assertions, tickets, gateway keys or chat content

Public chats

Do not pass or request personal data

Go-live checklist

  • [ ] Share created for the production environment with production origins only

  • [ ] Public: snippet contains only the share ID — no user data

  • [ ] Delegated: issuer, audience and JWKS registered; JWKS reachable from Ragty

  • [ ] Delegated: assertion verified against How the User Is Passed (kid, iss, aud, sub, exp ≤ 5 min)

  • [ ] Delegated: sub equals the subject used for document ingestion

  • [ ] Gateway key stored in the secret manager; rotation process defined

  • [ ] Ticket endpoint rejects unauthenticated requests and missing CSRF tokens

  • [ ] CSP of your pages updated; no console errors

  • [ ] Tested: allowed origin works, another origin is rejected

  • [ ] Tested: user A cannot see user B's chats (delegated)

  • [ ] Tested: reload restores history; logout removes the chat

  • [ ] Daily quota and retention agreed with the Ragty administrator

  • [ ] Contact defined to disable the share in an emergency (Ragty → Chat shares → Disable)

Troubleshooting

Symptom

Cause

Fix

“This chat is currently not available.”

Share disabled, expired, deleted, gateway key invalid, or integration type not enabled

Ask the administrator to check the share status

iframe blank; console mentions frame-ancestors

Page origin not allowed

Register the exact origin (scheme, host, port)

CORS error for /embed/v1/…

Page origin not allowed or web component not enabled

Register the origin / enable Web component

Delegated chat shows only its title and never starts

getTicket is not set — the component waits for it

Set the getTicket property on the element

Chat asks for a new session repeatedly

getTicket fails, or the ticket's origin differs from the page origin

Check your endpoint's response and origin

Ticket endpoint gets 401 from Ragty

Gateway key or assertion invalid (often aud, iss with/without trailing slash, missing kid, expired)

Decode the assertion and compare with the format table

Ticket endpoint gets 403 from Ragty

Origin not allowed, wrong issuer, or user erased

Fix origin/issuer; ask the administrator

User sees no own documents

sub differs from the ingestion subject (format/case)

Use exactly the same value

Public history lost after reload

Browser blocks partitioned third-party cookies or private mode

Expected for public chats; use delegated for persistent history

“Too many requests”

Rate limit or daily quota reached

Wait a minute; ask for a higher quota

12 November 2026