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
subis 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 |
|
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 |
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:
subequals 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 | Page origin not allowed | Register the exact origin (scheme, host, port) |
CORS error for | Page origin not allowed or web component not enabled | Register the origin / enable Web component |
Delegated chat shows only its title and never starts |
| Set the |
Chat asks for a new session repeatedly |
| Check your endpoint's response and |
Ticket endpoint gets | Gateway key or assertion invalid (often | Decode the assertion and compare with the format table |
Ticket endpoint gets | Origin not allowed, wrong issuer, or user erased | Fix origin/issuer; ask the administrator |
User sees no own documents |
| 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 |