User Authentication¶
Applies to: All subscriptions
Purpose¶
Describe how users authenticate, what an administrator can configure, and what to do when someone cannot sign in — a category that accounts for a large share of first-line tickets and is usually not an authentication fault at all.
Audience¶
Identity administrators, system administrators, security reviewers, first-line support.
Prerequisites¶
- Authentication and Security
- Mail transport configured and tested — see Email and Notifications
Reference¶
Sign-in methods¶
| Method | How it works | Notes |
|---|---|---|
| Email and password | Local account, credential verified against the stored hash | Always available |
| External identity provider | The browser authenticates with the customer's identity provider | Configured at front-end build time and on the API |
| Social sign-in | Where enabled and permitted by customer policy | Frequently disallowed by corporate policy — confirm before offering it |
| Email one-time code | A code sent to the account's address | Depends entirely on mail delivery |
Sessions¶
A successful sign-in issues a signed session token, held by the browser and presented on every request. The API is stateless — nothing about the session is stored server-side.
| Property | Consequence |
|---|---|
| Signed with a server secret | Changing that secret invalidates every session immediately. A deliberate act, not a routine restart |
| Carries identity and scope | Which is why scope is never taken from client input |
| Time-limited | Users re-authenticate when it expires |
| Stateless | Scaling out requires no session affinity |
Verify: Session lifetime, password complexity, lockout thresholds and reuse rules are not stated in this portal. Obtain them from Complifly before answering a security questionnaire or aligning to customer policy. Recorded as assumption E3 in the Assumptions Register.
Everything depends on mail¶
Password reset, one-time codes and account activation all require a delivered email. If mail is misconfigured, users are locked out and nothing indicates why:
- No error appears in the interface.
- Nothing fails at application startup — mail credentials are validated at send time.
- The ticket that reaches support says "I cannot log in", which sends the responder to authentication rather than to mail.
When several users cannot sign in at once, check mail delivery first. It is the most common cause and the least obvious.
GSTIN access is separate from sign-in¶
Authentication establishes who a user is. Two further gates decide what they see:
| Gate | Controls |
|---|---|
| Role | Which actions they may perform. See Roles and Permissions |
| GSTIN access | Which registrations they may work with |
A user who signs in successfully and sees nothing usually has no GSTIN access, not an authentication problem. This distinction resolves a large share of "it is broken" reports.
Account lifecycle¶
| Stage | Action | Note |
|---|---|---|
| Create | Administrator creates the account with a role and GSTIN access | The email must be one the user actually reads |
| Activate | The user completes activation from an emailed message | Blocked entirely if mail is not working |
| Operate | Normal use | — |
| Change role | Administrator updates it | Takes effect on the user's next sign-in |
| Suspend | Disable the account | Use for temporary removal of access |
| Revoke | Disable on departure | Do not delete. Deletion breaks the attribution of past actions in the audit trail |
The final row matters for audit: a compliance system must be able to say who performed an action years later. Disable, never delete.
Development-only sign-in conveniences¶
Development builds may include conveniences that bypass normal sign-in. These must be absent or disabled in every production build. Verify explicitly before publishing a production front-end bundle — see Front-end Deployment.
Validation¶
| Check | Method | Pass condition |
|---|---|---|
| Sign-in works | Sign in as a test user | Reaches the landing screen |
| External identity provider works | Sign in through it | Succeeds and the redirect returns correctly |
| Password reset works | Trigger a reset to a real mailbox | Message arrives in the inbox and the reset completes |
| One-time codes arrive in time | Trigger a code | Delivered well inside its validity period |
| Lockout works | Attempt sign-in with a wrong password repeatedly | Locks out per policy |
| Role gating works | Sign in as a limited role and attempt a restricted action | Refused or greyed out |
| GSTIN gating works | Sign in as a user with access to one registration | Only that registration's data is visible |
| Session expiry works | Leave a session idle past its lifetime | Re-authentication required |
| Revocation works | Disable an account and attempt to sign in | Refused |
| No development bypass in production | Search the published front-end bundle for the flag names | Absent |
| Attribution works | Perform an action and inspect the audit trail | The action is attributed to the correct user |
Troubleshooting¶
| Symptom | Cause | Action |
|---|---|---|
| Several users cannot sign in at once | Mail delivery failure, not authentication | Check mail first. See Email and Notifications |
| One user cannot sign in | Wrong password, locked out, or account disabled | Check the account state before anything else |
| Password reset email never arrives | Mail misconfigured, wrong address, or filtered as spam | Confirm the address, then test delivery to a known-good mailbox |
| One-time code expires before it is read | Relay latency exceeds the code's validity | Reduce latency, or extend the lifetime deliberately |
| Everyone signed out at once | The token signing secret changed | Expected if intended. If not, investigate what changed the configuration |
| Signs in successfully but sees nothing | No GSTIN access | Grant access. Not an authentication fault |
| Signs in but every button is greyed out | Role lacks the permissions | Fix the role. See Roles and Permissions |
| External sign-in redirect fails | Redirect URL not registered, or a protocol mismatch | Register the exact URL, including scheme and path |
| Social sign-in blocked by the customer | Corporate policy | Confirm the policy before enabling it |
| A departed employee's past actions lost from the audit trail | The account was deleted rather than disabled | Disable, never delete. Restore attribution if possible |
| Sessions expire too quickly for users | Lifetime shorter than the working pattern | Confirm the configurable range with Complifly before changing it |
Related Articles¶
- Machine-to-Machine Authentication — the other plane
- Roles and Permissions — what a signed-in user may do
- User Lifecycle — creation to revocation
- Email and Notifications — the dependency behind most sign-in tickets
- Login and Access Failures — the diagnostic tree