People sign in to AWRA with a password, with a one-time link and code emailed to them, or with a work account they already have. Whichever route they take, they arrive at the same ordered set of checks — so a faster way in is never a weaker one, and adding a sign-in method can never quietly create a way around your MFA challenge.
Password, emailed link or code, and five identity providers.
1 chain
Every method runs the same gates, in the same order.
0 bypass
An MFA-enabled account is challenged on all three.
The gate chain
The interesting engineering here is not any one method. It is that there is only one corridor.
The common way this goes wrong is not a broken lock — it is a second door built later, by someone in a hurry, that skips a check the first door performed. So in AWRA the sign-in methods do not each decide what to enforce. They authenticate, then hand over to one shared routine that runs every gate in a fixed order. A new sign-in route that forgets to call it does not work at all, which is a much better failure than one that works and skips MFA.
01
The account is still active
A deactivated person is refused by every method, and refused first — before anything has told them whether the credential they presented was correct. The attempt is written to the audit trail against their identity, so a wave of tries against a disabled account is visible rather than silent.
inactive_account — “Your account has been deactivated. Please contact support.”
Password Link or code Provider
02
The email address is verified
An unverified address parks the person on the verification notice with a fresh link, rather than letting them in to do work that nobody can be contacted about. There is one exception, and it is a narrow one: when a provider hands us a verified address that exactly matches the account’s own, that is the same proof our verification email was trying to obtain, so it settles the address instead of demanding a round trip. A provider address that differs proves nothing about the account’s, and falls through to the normal flow.
Password Link or code Provider
03
Your organization’s provider-only policy
If your organization requires everyone to sign in through a provider account, passwords are refused — and so are emailed links. That second half is the part worth reading twice. A link to somebody’s inbox is not your identity directory, and an organization mandating provider sign-in is mandating its directory as the authority on who its people are. Treating the inbox as an acceptable substitute would quietly reopen the door the policy exists to close.
sso_required — “Your organization requires signing in with your work account.”
Password Link or code Provider
04
The password has not aged out
Under an expiry policy, a password past its age sends its owner to set a new one. This gate is deliberately password-only: somebody signing in by link or by provider account is not presenting a password at all, so its age is not what is authenticating them. Bouncing them to a reset would block a sign-in the policy has no quarrel with.
password_expired — a reset link is sent automatically.
Password Link or code Provider
05
No administrator has forced a change
An administrator requiring a password change is an explicit instruction and outranks the sign-in method used. The related case is subtler: an account that has never had a password of its own — normal for someone invited who signs in by link or provider — blocks only the password route. Sending that person on a password-reset detour would be a bug, not a control.
Password Link or code Provider
06
The subscription is in good standing
The same billing check the dashboard and the route middleware use, applied at the door rather than one screen later. An expired free plan lands on the upgrade page instead of a half-loaded workspace.
Password Link or code Provider
07
The MFA challenge, on every method
This is the gate the whole design exists to protect. If an account has MFA enabled it is challenged — whether it arrived by password, by emailed link, or by a provider handshake. A fast sign-in method is not a second factor: the provider or the link replaces the password, and nothing more. The session is dropped back to unauthenticated while the challenge is pending, so a half-signed-in state cannot be used to reach anything.
mfa_challenge — recorded as an event, not a failure.
Password Link or code Provider
Every refusal above is an audit event with a reason code, not a generic failure. The trail separates inactive_account from sso_required from password_expired from a wrong credential, which is the difference between “someone is being stopped by policy” and “someone is guessing”. Those entries land in the tamper-evident audit trail, so the record of an attack survives contact with the attacker.
Signing in without a password
Every sign-in email carries two things, because the link is useless on the wrong device.
Ask AWRA for a sign-in link and the message contains a button and a six-digit code. The link is the fast path. The code is for the situation everyone has actually been in: the email arrived on your phone and you are trying to sign in on a shared warehouse terminal. Both are single-use, both expire together, and using either one immediately kills the other.
The link, and why opening the email does not spend it
Mail security products and inbox previewers fetch the links inside messages before a human ever sees them. If arriving at the link consumed it, that automated fetch would burn the only credential the person had. So the page the link opens checks the token and shows a confirmation screen without spending it — the sign-in happens when the person confirms.
Your AWRA sign-in link
Sign in to AWRA
or enter this code
402917
Expires in 15 minutes. Using one of these cancels the other.
The code, and why a spent credential says which half spent it
A system that answers every dead credential with “expired” strands the one person who is not under attack: someone whose code stopped working because their link was opened on another device. So that specific case is named outright — and reaching it requires having genuinely spent the link, which means real access to the mailbox.
Everything else collapses into a single answer. A mistyped code, an expired code and an address with no account are deliberately indistinguishable, because the alternative turns the sign-in page into a tool for testing which of a company’s email addresses have accounts.
Unguessable, and stored hashed
The link token carries 32 bytes of cryptographic randomness. Neither the token nor the code is stored in a readable form — only hashes — so the credential cannot be lifted from storage and replayed.
Fifteen minutes, and a five-try limit
The pair expires fifteen minutes after it is minted, and the code accepts a small number of wrong attempts before it burns. Both figures are configurable per deployment.
The same answer for every address
Requesting a link always says the same thing: if that address belongs to an account, a link and code have been sent. Whether the address exists, whether the account is active, even whether the email failed to send — one answer, so nothing here enumerates your staff.
Changing the email invalidates it
The credential remembers the address it was minted for. If the account’s email changes after the message goes out, neither half will sign in — closing the window where a link sent to a former address still works.
Bots get the friendly answer and no email
Automated submissions are detected and answered exactly as a human is, minus the email. A different response for bots is a signal to tune against.
Requested and consumed are separate events
The trail records the request and the redemption as distinct entries, and an incorrect code as a failure with its own reason. A link requested but never used looks different from one that was used.
Signing in with an account you already have
Five providers — and a rule about verified addresses that each of them satisfies differently.
Provider sign-in matches a provider identity to an AWRA user by email address, which only works if the address has actually been verified by the provider. “Verified” is not one thing across five providers, though: some publish a claim saying so, one publishes nothing and guarantees it in the API instead, and one needs a directory-owned principal name to be convincing. Reading each provider on its own terms is the whole job.
Google
A verified-email claim on the profile.
verified_email · email_verified
Microsoft
A claim, or a directory-owned principal name for work and school accounts.
email_verified · xms_edov
LinkedIn
A verified-email claim on the profile.
email_verified
GitHub
No claim exists to read. The API only ever yields a primary, already-verified address — so a well-formed address here is the verified one.
guaranteed by the API, not a claim
Slack
A workspace-issued address, verified on the provider side.
provider-resolved address
It signs people in. It does not create them.
A provider account whose address has no AWRA user is refused and told to ask an administrator for an invitation. This is worth being blunt about because it is often sold as frictionless onboarding: it is not onboarding at all. Nobody arrives in your workspace because they happen to hold a matching email address.
A second account on the same provider is a refusal
If a different Google or Microsoft account already points at an address, a new one claiming it is rejected rather than silently re-pointed. Quietly moving that link is the shape of an account takeover, so it is treated as one.
Several providers, one person
A user can link more than one provider and sign in with any of them. The only conflict is the same provider twice — that slot has to be freed from the profile page first.
No shared address, no sign-in
A provider that declines to share an email address cannot be matched to a user, and the attempt is refused with that reason rather than guessing at an identity.
The same handshake on the mobile app
Provider sign-in works from the Android app through a short-lived browser-to-app handoff, scoped to the provider that started it so one provider’s callback cannot be redirected by another’s leftover marker.
And it can be made mandatory
A security policy can require provider sign-in for everyone in your organization, which is gate 3 above — refusing passwords and emailed links alike.
For the security questionnaire
The rows this answers — including the one where the answer is no.
Authentication is the section of a vendor assessment where marketing language collapses fastest, because the follow-up question is always specific. Here is what we would write in the box, phrased to survive being read by somebody whose job is to find the gap.
They askDo you support SAML 2.0 or OIDC federation with our identity provider?
No — not today, and we will not describe what we have as that. AWRA supports OAuth sign-in with Google, Microsoft, LinkedIn, GitHub and Slack accounts, which covers Entra ID and Google Workspace identities in practice. It is not SAML, there is no OIDC discovery against an arbitrary issuer, and there is no SCIM provisioning. That work is on the public roadmap as planned rather than in progress, and the roadmap entry was corrected downward in August 2026 specifically so this answer could not be misread.
They askCan a fast or passwordless sign-in method bypass MFA?
No. Every method funnels through one shared routine, and the MFA challenge is the last gate in it. An emailed link or a provider handshake replaces the password — not the second factor. While a challenge is pending the session is returned to unauthenticated, so there is no partially-signed-in state to exploit.
They askCan you require that our users sign in only through their work accounts?
Yes, as an organization-level policy. It refuses passwords and emailed links, because a link sent to an inbox is not your identity directory. The refusal is recorded with its own reason code, and it is evaluated only after the account is known to exist and be verified so the message cannot be used to enumerate addresses.
They askDoes provider sign-in automatically create accounts?
No. There is no just-in-time provisioning. An unrecognised address is refused and directed to an administrator. Accounts are created by invitation, and an allowed-email-domain policy is enforced at that point.
They askHow long is a passwordless credential valid, and can it be replayed?
Fifteen minutes by default, single-use, and stored only as a hash. The link token carries 32 bytes of randomness. Redeeming either the link or the paired code revokes the other. A credential is also invalidated if the account’s email address changes after it was issued.
They askDoes your sign-in page reveal whether an email address has an account?
No, by design and in every branch. A link request for an unknown address, an inactive account, or an address where the email itself failed to send all produce the same response. The one place we deliberately say more is when a code was revoked because its link was opened elsewhere — reaching that state requires having already spent the link, which means access to the mailbox.
They askWhat is recorded for authentication events?
Successful sign-ins, MFA challenges, link and code requests and redemptions, and each failure with a distinct reason — deactivated account, policy refusal, expired password, incorrect code, an address changed after issue. These are entries in the hash-chained audit trail rather than an application log.
The first row is the one to press us on. If your requirement is a SAML application in your own identity provider with SCIM deprovisioning, we are not there yet and a demo will not change that. The public roadmap carries it with a status we are willing to be held to, and the compliance matrix marks which of our control claims have been verified against the code and which have not.
What it is, and what it isn’t
Read this before you write “supports SSO” in a tender response.
“Single sign-on” means two different things depending on who is saying it, and the gap between them is exactly where a procurement process goes wrong six weeks in. Here is the line drawn where we would want it drawn if we were the ones evaluating.
What you actually get
One enforcement path, not three. Methods authenticate; a single shared routine decides who gets in. A new sign-in route that skips it does not function, rather than functioning insecurely.
MFA that no method can outrun. The challenge is the final gate for every route in, including the fast ones.
Provider sign-in with Google and Microsoft work accounts. For most organizations already on Workspace or Microsoft 365, this delivers the day-to-day experience people mean by SSO.
A genuine passwordless option. Single-use, hashed, short-lived, with a paired code for the wrong-device case and cross-revocation between the two.
No enumeration surface. The sign-in and link-request pages answer identically regardless of whether an address exists.
Reason-coded audit entries. Policy refusals are distinguishable from wrong credentials, in a trail that is hash-chained rather than a log file.
What we are not claiming
Not SAML 2.0, and not OIDC against your issuer. No SAML assertion handling and no arbitrary-issuer discovery exists in the product. If your security review requires an application entry in your own identity provider, this is not that.
No SCIM provisioning or deprovisioning. Users are invited and deactivated in AWRA. A leaver removed from your directory is not automatically disabled here, and that is the gap to plan around.
No just-in-time account creation. Provider sign-in matches existing users only.
Not passkeys or WebAuthn. Passwordless here means an emailed credential, not a hardware-backed one bound to your device.
Email is in the trust path for the link method. Anyone with access to a mailbox can request a link for it. That is inherent to the mechanism — it is why MFA is still enforced, and why an organization that finds it unacceptable should turn the method off or require provider sign-in.
The allowed-domain policy is applied at invitation, not at sign-in. It constrains which addresses can become users; it is not a second check performed on every login.
Why the honest version is the useful one. A vendor who answers “yes, we support SSO” to the SAML question buys six weeks and loses the deal in week seven, when an engineer asks for the metadata URL. If provider sign-in with Google or Microsoft accounts meets your requirement, this is built, in production, and you can exercise it this afternoon in a free workspace. If it does not, you have that answer now.
Connected controls
Getting in is one decision. What you can then do is a different set of them.
Authentication answers who somebody is. These are the controls that decide what that person may reach, from which device, for how long, and what record it leaves.
Fewer forgotten passwords, and no new way around your controls.
The usual trade in this area is convenience against control: every method you add to make signing in easier is another place a check can be missed. Funnelling all of them into one corridor is what makes that trade unnecessary.
A storekeeper who has forgotten a password gets in from an emailed code on a shared terminal, without a call to whoever holds the admin account.
Your MFA policy actually holds
Adding a faster route in does not create a quieter one. The challenge is the last gate on every path.
Deactivation means deactivated
One check, ahead of every method — so removing someone does not leave a second door they still know about.
Policy refusals are legible
A spike of “provider required” refusals reads differently from a spike of wrong passwords, because the trail records which is which.
The sign-in page stops leaking your staff list
Identical answers for every address mean the login form is not a directory of who works for you.
Security reviews get a straight answer
Including on SAML, where the answer is no and is easier to plan around than a maybe.
Help Center
Need a quick answer while you read?
Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.
We use necessary cookies for secure sessions. With your permission, we also use cookies and browser storage for preferences, analytics, and demo engagement. Privacy Policy
AWRA OpsHub
Cookie settings
Cookie Consent Manager
Necessary cookies stay on for login, CSRF protection, and security. You can choose the optional categories below.
Overview
General Information
AWRA uses cookies and browser storage to keep public pages secure, remember selected preferences, measure website performance, and manage demo engagement prompts.
You can choose whether functional and marketing engagement storage apply. Analytics measurement is always active in this AWRA setup.
These settings apply to AWRA public website experiences such as the homepage, feature pages, pricing calculator, blog, help center, and request-demo page. Authenticated dashboard and vendor portal sessions still rely on required security cookies.
Required
Always active
Functional
Optional
Analytics
Always active
Marketing
Optional
For more context on privacy handling, open the Privacy Policy.
Required Cookies
Required Cookies
Always Active
Required cookies and storage support basic website delivery, secure sessions, request protection, and remembering the consent choice itself.
These cannot be switched off from this manager because disabling them would break login/session behavior, form protection, or the ability to remember the privacy choice you save.
Cookie details
Session security: keeps secure server sessions working while browsing AWRA.
CSRF protection: helps verify form submissions and protect requests.
Consent record: stores the preference decision so the banner does not keep asking after a choice is saved.
Examples: Laravel session cookies, CSRF tokens, and the AWRA consent preference record.
Duration: session security can expire with the browser/session; saved consent can last longer so the same browser remembers the choice.
Functional Cookies
Functional Cookies
Functional storage improves the public website experience by remembering interface choices, helper states, dismissed notices, and short-lived interaction preferences.
Turning this off does not stop secure required cookies or analytics. It only limits optional convenience memory.
If disabled, AWRA may show some helper prompts again or forget non-essential display choices. Core public pages, contact forms, and request-demo forms still work.
Cookie details
UI preferences: remembered display choices and helper states where available.
Dismissed notices: session-level or preference-level memory for notices the visitor has closed.
Frequency helpers: optional browser storage that prevents repeated prompts when allowed.
Examples: localStorage or sessionStorage values for dismissed banners, guide/helper states, and lightweight public-page preferences.
Effect when off: AWRA avoids optional convenience memory unless it is also allowed through marketing and engagement preferences.
Analytics Cookies
Analytics Cookies
Always Active
Analytics helps AWRA understand public page performance, traffic patterns, and content usefulness so we can improve the marketing website.
This category does not by itself enable demo popups, exit-intent prompts, or advertising pixels. Those are controlled by Marketing & engagement.
In this AWRA setup, Google Analytics and Google Tag Manager measurement are treated as mandatory website measurement and remain active.
Cookie details
Google Analytics / GTM: measures aggregate traffic and page activity.
Performance insight: helps identify which public pages, docs, and demo paths visitors use.
Operational signal: supports website quality decisions without enabling demo popups by itself.
Examples: Google measurement identifiers such as GA/GTM tags and related browser identifiers set by Google scripts.
Use: page views, source/referrer trends, public content performance, and product education page effectiveness.
Marketing & engagement
Marketing & engagement
Marketing and engagement storage supports demo prompts, exit-intent prompts, campaign attribution, and future advertising pixels.
When disabled, AWRA will not auto-open demo or exit-intent popups. CTA buttons can still open a form because that is a direct visitor action.
When enabled, AWRA can remember that a visitor already saw, dismissed, or submitted a demo prompt so the same popup is not repeated aggressively.
Cookie details
Demo prompt memory: tracks whether an auto prompt or exit prompt was recently dismissed.
Demo submission memory: avoids asking again after a visitor submits a demo request.
Campaign context: keeps source page, referrer, and UTM context available for demo requests.
Examples: popup frequency caps, demo-submitted flags, engagement source fields, and UTM/referrer context.
Effect when off: auto demo prompts and exit-intent prompts stay blocked; normal navigation and manually clicked CTA buttons still work.