Session policy
Sliding-window refresh tokens and concurrent session limits.
auth-policy.json at the project root controls the refresh token
architecture, including how many devices a user may be signed in on at once.
Limits are set per surface, because the right number differs between them:
| Surface | Typical use |
|---|---|
tenantWeb | Browser sessions for tenant users |
tenantMobile | Mobile app sessions |
root | Platform administrator sessions |
Eviction
When a user exceeds the configured limit, the oldest active session is evicted rather than the new login being refused:
Refresh request from device #3
→ check max sessions (limit: 2)
→ limit exceeded
→ evict oldest active session (device #1)
→ issue new access + refresh tokensThe trade-off is deliberate. Refusing the new login is more secure in the strictest reading, but it strands a user who has lost a device with no way back in. Evicting the oldest keeps the limit meaningful while leaving the person in front of you able to work.
SSO sessions
A session created through SSO is an ordinary session. The provider is used to assert an identity once, at login; the moment it confirms who the user is, the engine issues its own tokens and the provider is never contacted again — its access token is discarded rather than stored.
So an SSO session is indistinguishable from a password one: the same access
token, the same rotating refresh token, the same session limits and eviction
described above, and the same JwtStrategy guarding every later API call.
SSO signs a user in; it does not sign a user up. The engine will not create a user from an SSO assertion, because proving control of an email address is not proof of membership of a tenant — auto-provisioning would let anyone with a Google account mint access to any account ID they could guess. The user must already exist and be active in the tenant.
For obtaining each provider's credentials, see SSO providers.