SSO implementation with Okta — SAML assertion failing for subset of users

We migrated our IdP from Azure AD to Okta last weekend. SSO is functional for approximately 85% of our user base, but I'm seeing consistent authentication failures for a specific subset of users.

Failure Pattern:

  • Affected users: 23 of 156 total licensed FieldPulse users
  • Commonality: All affected users were created in FieldPulse prior to March 2024
  • Error received: "SAML assertion validation failed" with no additional detail in the login UI

Environment Details:

  • FieldPulse SSO configuration: SAML 2.0
  • IdP: Okta (production tenant)
  • NameID format: EmailAddress
  • Attribute mapping: email → email, firstName → firstName, lastName → lastName
  • SP-initiated and IdP-initiated flows both exhibit the same failure pattern

Diagnostics Completed:

  • Verified Okta user profiles have correct email addresses (no trailing spaces or special characters)
  • Confirmed affected users have active Okta assignments and can authenticate to other SPs
  • Exported SAML assertion from browser dev tools — signature validates successfully against Okta certificate
  • Compared assertion XML between working and failing users: identical structure, differing only in user-specific values
  • Checked FieldPulse audit logs at Settings → Security → Audit Log: login attempts from affected users do not appear (no entry at all, success or failure)

The absence of audit log entries suggests the failure occurs before FieldPulse processes the assertion. I have confirmed that the email address in the NameID matches exactly what is stored in FieldPulse user records.

Has anyone encountered selective SAML failures based on user creation date or historical IdP linkage? I suspect there may be residual metadata from the previous Azure AD configuration causing a mismatch, but I cannot locate where FieldPulse stores historical IdP identifiers per user.

I can provide redacted SAML assertions via direct message if helpful for analysis.

Parents
  • From a governance perspective, I would caution against requesting bulk clearing of sso_external_id fields without understanding why the mismatch occurred.

    It is worth noting that Okta's SAML configuration allows you to specify the NameID format on a per-application basis. If your previous Azure AD integration used the urn:oasis:names:tc:SAML:2.0:nameid-format:persistent format (which sends an opaque identifier), and your current Okta configuration uses urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress, the fundamental identifier has changed.

    In my experience, the more robust long-term solution is:

    1. Configure Okta to emit a persistent identifier that matches your historical Azure AD values, or
    2. Implement a formal user re-provisioning workflow that captures the new identifier and updates FieldPulse accordingly

    Bulk clearing may satisfy immediate access requirements, but it creates an audit gap — you will have users authenticating without a verifiable link between their historical SSO sessions and current identity provider.

    I have confirmed that FieldPulse does not currently support SCIM provisioning, which would have provided a cleaner migration path. It may be worth evaluating whether your organization requires this capability for future IdP transitions.

Reply
  • From a governance perspective, I would caution against requesting bulk clearing of sso_external_id fields without understanding why the mismatch occurred.

    It is worth noting that Okta's SAML configuration allows you to specify the NameID format on a per-application basis. If your previous Azure AD integration used the urn:oasis:names:tc:SAML:2.0:nameid-format:persistent format (which sends an opaque identifier), and your current Okta configuration uses urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress, the fundamental identifier has changed.

    In my experience, the more robust long-term solution is:

    1. Configure Okta to emit a persistent identifier that matches your historical Azure AD values, or
    2. Implement a formal user re-provisioning workflow that captures the new identifier and updates FieldPulse accordingly

    Bulk clearing may satisfy immediate access requirements, but it creates an audit gap — you will have users authenticating without a verifiable link between their historical SSO sessions and current identity provider.

    I have confirmed that FieldPulse does not currently support SCIM provisioning, which would have provided a cleaner migration path. It may be worth evaluating whether your organization requires this capability for future IdP transitions.

Children
No Data