Application deployment checklist
Use the items that apply to your integration. For explanations, see deploy your application. If Udibo hosts sign-in, review your client/BFF/API boundaries; the app-owned identity and issuer sections apply only when you host those flows.
Configuration and secrets
Issuer, app origin, and exact callbacks are configured for this environment.
Production credentials and data are separate from local and preview environments.
No demo credentials, fallback secrets, or local test-provider endpoints remain.
Client secrets, cookie keys, and signing keys stay on the backend and out of logs.
Browser, BFF, and API
HTTPS cookie and CSRF defaults are enabled; custom browser requests send the CSRF header.
The BFF's
sessionStoreandauthRequestStoragework on every instance that serves the app: encrypted-cookie stores with secrets every instance shares, a separate one per store instance and per app, or stores over shared storage.MemorySessionStoreandMemoryAuthRequestStorageFactoryappear only in single-process, test and local configurations. If sign-out must revoke a stolen session cookie, use a sharedSessionStore:EncryptedCookieSessionStorekeeps a copied cookie valid until itsmaxAgeMs. See choosing the BFF's stores.Login state and PKCE verifier survive callbacks to a different app instance.
A server-side
DirectClientthat signs users in or runs the device flow has anauthRequestStorage(on the client or passed per call) and arefreshTokenStoragethat every instance can read and that outlives a restart.MemoryAuthRequestStorageandMemoryRefreshTokenStorageappear only in single-process, test and local configurations. See DirectClient storage outside a browser.Pending sign-ins are bounded. A multi-instance or internet-facing BFF uses
EncryptedCookieAuthRequestStorage, or shared storage with its own cap. The login route has a rate limit, andmaxReturnToLength(default 2048) suits your return paths. See pending sign-in limits.Behind a TLS-terminating proxy, the app origin comes from configuration (
redirectUriorresolveOrigin), and SSO logout sends the registeredhttpspost-logout redirect URI.Sessions expire consistently and stateful updates reject revoked or missing sessions.
Local logout, upstream revocation, and optional SSO logout have each been tested.
Session listings expose non-secret row IDs, never cookie credentials or token material.
The API validates issuer, token type, applicable audience, and required scopes.
Record-level authorization runs on the server, independently of React rendering guards.
The app handles invalid tokens separately from issuer outages.
Any proxy has a fixed trusted target; trusted-forwarded-header policy matches deployment.
Every route that reads its own body has a request-size limit in the framework or reverse proxy, mounted ahead of
protect(). The package caps only its own reads:maxTokenBodyBytesfor the form-bodyaccess_tokensearch andmaxBodyBytesforhonoIdentityRoutes.
If your app hosts an authorization server
PKCE, state, and confidential-client authentication are enabled.
Registered callbacks and allowed grants are restricted to the app's actual clients.
Codes and refresh-token rotation claims are consumed atomically.
The token store implements
rotate, claiming a refresh token and saving its successor in one step thatrevokeFamilycannot interleave with, and passesrunTokenRotationContractTestswith its barrier wired.The token store implements
exchangeCode, claiming a code and saving its token in one step, and passesrunCodeExchangeContractTestswith its barrier wired; itsrevokeCoderevokes nothing for a client other than the code's own, or for acodeVerifierHashother than the one saved with the code's tokens.Without
rotate, family revocation, from a replay or from revoking a rotated-out token, cannot be undone by a concurrent token save:revokeFamilyrecords the family andsavestores any later member of it already revoked.getRevokedRefreshTokenreturns every tombstone; a replay grace comes fromreplayGraceSeconds, judged on the store's clock byisWithinReplayGracewhen the store stampsrotatedAtitself, not from hiding recent tombstones.Client-credentials tokens represent the client or its service account, not its human owner.
Consent and scope policy match the clients you allow.
maxBodyBytesstays at its 64 KiB default unless your clients send larger token, revocation, introspection or end-session bodies.Persisted signing keys survive deployment; rotation and JWT revocation limits are understood.
The deprecated password grant is not enabled for new integrations.
If your app hosts login
The full password credential, including
params, is persisted.Automatic rehash/import uses atomic
replaceCredential; a failed comparison writes nothing, and the sign-in proceeds only if the password re-verifies against the credential now stored.Rate limiting and lockout are explicitly configured and enforced.
RateLimiterandAccountLockoutuse aRateLimitStoreand aLockoutStorethat every instance shares, with an atomicincrement.MemoryRateLimitStoreandMemoryLockoutStoreappear only in single-process, test and local configurations. See rate limit and lockout storage.Email requests and OTP/MFA attempts are throttled; concurrent resend policy is explicit.
OTP consumption and recovery-code consumption permit one successful caller.
Password reset invalidates sessions; optional sign-in-link/OTP cleanup is implemented and monitored.
Email verification is conditional on the current address matching the address proved.
MFA enrollment, disable, recovery, and verification routes authenticate and authorize the user.
A completed first factor creates pending MFA state, not a full application session.
External identities are keyed by trusted provider and subject; linking requires account proof.
Apple callbacks accept form POSTs and use the required Secure, SameSite=None transient cookie.
Verification and maintenance
Contract suites pass against the actual persistent adapters.
Tests cover concurrent redemption, callback mismatch, expired/revoked sessions, and insufficient scope.
Backups, retention, and recovery are exercised without restoring revoked access unintentionally.
Audit records omit credentials; delivery and persistence failures are observable.
The known limitations have been reviewed for enabled features.

