Where to find it
Settings > Security (/dashboard/settings/security).
Your widget key (ab_live_...) is managed on Setup > Install, not here. This page is for account security and identity verification only.
Two-factor authentication
Halo supports TOTP-based 2FA (Authenticator app, 1Password, Authy, Google Authenticator, etc.) with single-use recovery codes for fallback.Enabling 2FA on your own account
Open Settings > Security and click Enable 2FA:- Scan the QR code with your authenticator app (or copy the secret manually)
- Enter the 6-digit code your app shows
- Save the 10 recovery codes that are shown once and never shown again
Signing in with 2FA
After password (or Google) sign-in we route you to a challenge screen. Enter the 6-digit code from your authenticator app to finish signing in.Lost your authenticator?
Click Use a recovery code on the challenge screen. Each recovery code works exactly once. Using a recovery code disables your current authenticator, and we send you straight to the security page to set up a new one. This matches the standard GitHub/Google flow and means a stolen device’s TOTP secret is invalidated as soon as the legitimate user signs in via recovery. You can regenerate a fresh batch of 10 codes at any time from the Recovery codes button. Generating new codes invalidates the old set.Disabling 2FA
Click Disable under your 2FA status. We require an AAL2 session (i.e. you must have completed a TOTP challenge during this sign-in) so a stolen-password attacker can’t quietly turn 2FA off. Disabling deletes your factor and any remaining recovery codes.Org-wide enforcement
Admins can flip Require 2FA for everyone. When on:- Any teammate without 2FA is blocked from the dashboard until they enroll
- They land directly on the security page with the setup dialog open
- The MFA challenge is required on every fresh sign-in for already-enrolled teammates
two_factor_required: true on teams.settings.security. The middleware caches the flag for up to 5 minutes, so policy changes propagate within that window.
Session timeout
Set the session timeout (in minutes) for inactive teammates. After N minutes without activity, they’re logged out and must sign in again.| Value | Use case |
|---|---|
| 15–60 minutes | High-security teams (finance, healthcare) |
| 240 (4 hours) | Default for most teams |
| 1440 (24 hours) | Loose; teammates rarely have to re-login |
Identity verification
Use an identity secret (ha_secret_...) to sign JWTs that prove a visitor really is the user_id they claim. Without it, anyone who reads your public widget key from your site’s HTML can impersonate another user’s chat history and tickets.
Configure identity verification on this page:
- Generate identity secret (shown once; store it server-side only)
- Choose a mode: Off, Monitor (recommended while integrating), or Enforce
- Watch production health on this page while in monitor mode
Verification modes
| Mode | SDK behavior | When to use |
|---|---|---|
| Off | No JWT checks | Internal tools, demos, or before you have backend minting wired up |
| Monitor | Validate tokens when present; log warnings but allow requests through | Integration and staging. Recommended default when you first generate a secret |
| Enforce | Reject authenticated SDK requests without a valid JWT (403) | Production once tokens are flowing reliably |
Production health and enforce gate
Once your widget is deployed, this page tracks identity checks from real production traffic:- Healthy — verified requests are succeeding. The banner shows the time of the last verified request.
- Warning / failing — missing, expired, or invalid tokens are reaching the API. The banner explains the most common cause (expired JWT, missing token, signature mismatch, etc.).
- At least one verified identity request landed in the last 24 hours, and
- No identity failures were recorded in that same window.
Widget key vs identity secret
| Credential | Prefix | Where it goes | Purpose |
|---|---|---|---|
| Widget key | ab_live_... | Browser (install snippet) | Identify your workspace to the SDK |
| Identity secret | ha_secret_... | Server only | Sign JWTs for identity verification |
What’s not here
A few things you might expect that aren’t on this page:- Widget key — Setup > Install
- Server-only REST API keys — coming in a future release; this page will host them when available
- SSO / SAML — not exposed in this UI today
- Audit logs — view-only audit logs aren’t surfaced in the dashboard
- Active session list — not currently available
Where to go next
Install the widget
Copy your widget key and install snippet.
Identity Verification
Use the identity secret to prevent user impersonation.