Error catalogueThe signed client assertion
Assertion expired, too long-lived, or not yet valid
What it means
exp must be in the future and at most 5 minutes out; iat/nbf must not be in the future.
Fix
Create a fresh assertion per request with exp = now + ≤300s, and check your clock.
Check it with smart-doctor
Run your login and smart-doctor ranks this cause against the others, with the evidence it found.
npx smart-doctor check my-profileAlready have the server’s error? Explain it without running anything.
npx smart-doctor explain '{"error":"invalid_grant"}'