You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using a `DomainResolver`, pass the domain explicitly so the grant targets the correct tenant. This is required because a refresh can occur outside of an HTTP request:
@@ -395,29 +399,93 @@ independent of the `exp` token lifetime.
395
399
396
400
This library does not own a session. It reads and validates the claim at login, exposing it
397
401
via `Tokens.getSessionExpiresAt()` (seconds, or `null` when absent) and
398
-
`Tokens.isSessionExpired()`. Persisting the value and enforcing the ceiling is the
402
+
`Tokens.isSessionExpired(...)`. Persisting the value and enforcing the ceiling is the
399
403
application's job.
400
404
405
+
> :warning:**The claim must be an integer number of seconds since the epoch.** The value is
406
+
> emitted by your tenant, so the most common mistake is emitting
407
+
> **milliseconds** (a `getTime()` without the `/ 1000`). A millisecond-scale value is **not**
408
+
> enforced as a date thousands of years out — it is out of range, so the library treats it as
409
+
> "no ceiling" and enforcement is silently **off**. Any non-numeric, zero, or negative value is
410
+
> likewise ignored (fails open to "no ceiling") rather than locking users out.
411
+
401
412
Persist it at login alongside the tokens (`null` means "no ceiling", store as-is):
0 commit comments