delivered for clients · names withheldimplementation Identity and access

Homegrown customer login to Auth0 or Okta Customer Identity

Cohash replaces homegrown customer login with Auth0, Okta's customer identity platform. We read the current user store and how passwords are hashed, then set up development, staging and production tenants with Universal Login. Users move by bulk import or by automatic migration when they next sign in. Passkeys and MFA go in, and post-login Actions keep Salesforce or Dynamics 365 contact records current.

  1. 01Read the current user store
  2. 02Tenants and Universal Login
  3. 03Move users
  4. 04Connect apps and CRM
  5. 05Cut over and retire the table
case-study / homegrown-login-to-ciam delivered
beforeHomegrown customer login and user table afterAuth0 customer identity
01 · CUSTOMERS 02 · APPLICATIONS 03 · AUTH0 04 · CRM AND ENTERPRISE IDPS Customers: passkeys · MFA Customers passkeys · MFA Business customers: their own Okta or Entra ID Business customers their own Okta orEntra ID Web app: OIDC with PKCE Web app OIDC with PKCE Mobile app: OIDC with PKCE Mobile app OIDC with PKCE Auth0 Universal Login: custom domain · attack protection Auth0 UniversalLogin custom domain · attackprotection Post-login Actions: CRM sync · enrichment Post-login Actions CRM sync · enrichment Custom database connection: automatic migration Custom databaseconnection automatic migration Salesforce or Dynamics 365: contacts Salesforce orDynamics 365 contacts Customer identity providers: via Organizations Customer identityproviders via Organizations
case file

The story

Told without the client's name or anything that could identify them.

what happened

A subscription business's digital team ran customer sign-in on homegrown code, with passwords in an application table hashed by a scheme chosen years earlier. Reset, MFA and lockout were custom code that rarely got tested, and bot sign-ups and credential stuffing showed up in the logs every week. We started by reading the user store: hash format, duplicate emails, unverified accounts and every app that read the table. Users then moved to Auth0 through bulk import or automatic migration on next sign-in, the apps switched to Universal Login over OIDC, and the old password columns were dropped once migration traffic fell away.

why it was urgent

In July 2025 NIST published SP 800-63B-4, now the federal baseline for authenticators and password rules. On 21 May 2026 Auth0 made Auth for MCP generally available, which lets your customers' AI agents call your APIs with proper OAuth. Getting a homegrown login table to support either one is real engineering work.

problem statement
  • openYour customers' passwords still live in an app table, hashed however somebody decided to hash them years ago.
  • recurringPassword reset, MFA and account lockout are custom code that rarely gets tested.
  • blockedBot sign-ups and credential stuffing show up in the logs every week.
  • openBusiness customers ask to sign in with their own Okta or Entra ID.
architecture

The estate, before and after

before
before

Before: homegrown sign-in in front of an application user table

Web and mobile apps posted credentials to custom login code that checked an old hashing scheme in the app's own table. Reset, MFA and lockout were custom code, and bots hit the same form as customers.

Before: homegrown sign-in in front of an application user table Web and mobile apps posted credentials to custom login code that checked an old hashing scheme in the app's own table. Reset, MFA and lockout were custom code, and bots hit the same form as customers. 01 · CUSTOMERS 02 · APPLICATIONS 03 · HOMEGROWN IDENTITY 04 · CRM password sign-in password sign-in stuffing attempts form post legacy endpoint hash check contact data Customers web · mobile Bots and credentialstuffing Web app custom login form Mobile app old login endpoint Homegrown login code reset · MFA · lockout User table old hash scheme ·duplicate emails Sf Salesforce orDynamics 365 contact records
Read the diagram as text
  1. Customers → Web app: password sign-in
  2. Customers → Mobile app: password sign-in
  3. Bots and credential stuffing → Web app: stuffing attempts
  4. Web app → Homegrown login code: form post
  5. Mobile app → Homegrown login code: legacy endpoint
  6. Homegrown login code → User table: hash check
  7. User table → Salesforce or Dynamics 365: contact data
after
after

After: Auth0 Universal Login handles every customer sign-in

Apps hand sign-in to Auth0 over OIDC with PKCE. Users who haven't moved yet migrate on next login through a custom database connection. Post-login Actions keep CRM contacts current, and business customers federate their own identity provider.

After: Auth0 Universal Login handles every customer sign-in Apps hand sign-in to Auth0 over OIDC with PKCE. Users who haven't moved yet migrate on next login through a custom database connection. Post-login Actions keep CRM contacts current, and business customers federate their own identity provider. 01 · CUSTOMERS 02 · APPLICATIONS 03 · AUTH0 04 · CRM AND ENTERPRISE IDPS sign in sign in sign in OIDC + PKCE OIDC + PKCE migrate on login post-login update contact federate Customers passkeys · MFA Business customers their own Okta or Entra ID Web app OIDC with PKCE Mobile app OIDC with PKCE Auth0 UniversalLogin custom domain ·attack protection Post-login Actions CRM sync · enrichment Custom databaseconnection automatic migration Sf Salesforce orDynamics 365 contacts Customer identityproviders via Organizations
Read the diagram as text
  1. Customers → Web app: sign in
  2. Customers → Mobile app: sign in
  3. Business customers → Web app: sign in
  4. Web app → Auth0 Universal Login: OIDC + PKCE
  5. Mobile app → Auth0 Universal Login: OIDC + PKCE
  6. Auth0 Universal Login → Custom database connection: migrate on login
  7. Auth0 Universal Login → Post-login Actions: post-login
  8. Post-login Actions → Salesforce or Dynamics 365: update contact
  9. Auth0 Universal Login → Customer identity providers: federate
results

What the client got

What changed for the client once the work was done. Described, not scored: we don't publish client figures.

  1. result 01

    Customers kept their passwords through the move

    We bulk imported every user with a supported hash and migrated the rest when they next signed in, through a custom database connection. Nobody got a forced reset email.

  2. result 02

    Sign-in runs on Universal Login with passkeys and MFA

    Passkeys, MFA and attack protection used to be custom code. Now they're tenant settings, and they apply to web and mobile alike.

  3. result 03

    CRM contacts stay current from sign-in

    Each sign-in now runs a post-login Action that updates the customer's Salesforce or Dynamics 365 contact record.

  4. result 04

    Business customers bring their own identity provider

    We set up Organizations so business customers sign in with their own Okta or Entra ID and skip a separate password.

  5. result 05

    Tenant configuration lives in source control

    We export the development, staging and production tenants with the Deploy CLI, so a change gets reviewed and promoted the same way code does.

what can go wrong

Risks we plan for

  1. Duplicate accounts by email

    It's common to find the same email in a homegrown store twice, with two different passwords. We settle account linking rules before the import, otherwise those users get two profiles.

  2. Monthly active user costs

    What you pay for Auth0 depends on active users and features. Test accounts, bots and dormant users inflate the count, so we find them before you pick a plan.

  3. Mobile apps on old versions

    Users who never update the app keep calling the old login endpoint. It stays up, or forces an upgrade, until usage falls.

  4. Session cut-over

    Sessions don't carry over to Auth0. So we pick when to switch and let users know ahead of time, to avoid logging anyone out in the middle of a checkout.

ai in this move

Where AI helps, and where it needs guardrails

Auth0 for AI Agents adds Token Vault and asynchronous authorization for approvals. It also adds fine-grained authorization, so retrieval only returns what a user may see. And Auth for MCP lets your own MCP servers accept OAuth tokens. If customers or their agents will reach your services through MCP, put the scopes and consent screens into this build. API keys added later are what we're trying to avoid.

forward deployed engineers →
you keep

What you're left with

We write these for your setup, and they're working documents. Your team should be able to keep things running from them long after we've gone.

  • report01

    User store analysis covering hashes, duplicates and dependent apps

    yours to keep
  • evidence02

    Tenant configuration in source control for three environments

    yours to keep
  • tests03

    User migration plan with bulk import and automatic migration tested

    yours to keep
  • document04

    Post-login Actions for CRM sync and enrichment

    yours to keep
  • runbook05

    Cut-over runbook and attack protection settings

    yours to keep
talent and delivery · auth0 customer identity

Certified engineers, wherever you need them.

Some clients want a project team, some want a couple of engineers on theirs. Either works. Onsite, nearshore or offshore, with handovers across time zones that keep things moving.

Onsite

Engineers at your sites in the US

Nearshore

Overlapping hours with US teams

Offshore

Overnight progress on your backlog

All time zones

Coverage handed over across time zones

24-hour coverage · US Central time
OnsiteUS business hours
Nearshoreoverlapping US hours
Offshoreovernight progress
Combinedhandover, not hand-off
01Will customers have to reset their passwords?

Not if we can import the hashes or use automatic migration. With automatic migration the user signs in once with their old password, Auth0 checks it against your database, and stores it from then on.

02Auth0 or Okta Workforce Identity for customers?

They're different products. Auth0 is Okta's customer identity platform, with Universal Login, Organizations for business customers and MAU-based pricing. Workforce Identity is built for employees. Customer sign-in, we put on Auth0.

03What drives the cost?

Monthly active users, which features you need, how many apps connect, and how messy the existing user data is. We count active users from your logs before you choose a plan.

04Can you also handle our B2B customers?

Yes, that's what Organizations is for. Each business customer connects its own Okta, Entra ID or SAML identity provider and manages its own users.

sources 3 sources linked last checked 2026-10-20 content fingerprint 6bc242d3
  1. 01NIST: SP 800-63B-4 Digital Identity Guidelines, Authentication (final, July 2025)csrc.nist.gov ↗
  2. 02Okta newsroom: Auth0 product innovations (21 May 2026)okta.com ↗
  3. 03Auth0 blog: Auth0 for AI Agents is generally available (19 Nov 2025)auth0.com ↗
Reviewed by the Cohash team Product names are trademarks of their owners. how we handle facts and data →
next step

Planning this move?

A 30-minute working session with a senior engineer. No slides.

useful to bring
  • The platform and the version you're on
  • Where you need to get to, and by when
  • What's custom: rules, plugins, integrations
  • Any audit finding or deadline driving it