No token ever reaches the browser
The session lives on the server (Redis) and the browser only gets an opaque, httpOnly, SameSite=Lax cookie, Secure in production. The access token is never exposed to the client.
Security
These are not good intentions. They are decisions already made in the code, verifiable on every request.
The session lives on the server (Redis) and the browser only gets an opaque, httpOnly, SameSite=Lax cookie, Secure in production. The access token is never exposed to the client.
Authentication is OIDC with PKCE (S256) and a single-use state. The client identifier is public; there is no secret to steal in the frontend.
Signing out of one product signs you out of all. Each session can be revoked from the person’s account, and revocation reaches every system.
Role and access level are resolved on the server. The browser cannot escalate privileges because it takes no part in the decision.
Every writing request validates its origin. Internal back-office routes are unreachable from outside the proxy.
Passwords are stored with bcrypt and never logged in clear. Recovery uses single-use codes with expiry.
Every sign-in, every data change and every technical error is recorded with date, actor and outcome.
Every query is filtered by the session’s company. No screen can return another company’s data by changing an identifier.
Each product’s information is stored in its own PostgreSQL database, hosted on servers we administer. Identity — people, companies and permissions — lives in Cancebi ID. Products do not store passwords: the IdP validates them.
If you find a security flaw, write to privacidad@cancebi.com. We will reply and, if the finding is valid, fix it before publishing details.
Privacy policy →