SAML assertion errors after IdP certificate update

We recently completed a scheduled certificate rotation on our Okta tenant per our security policy (certificate valid from 2025-08-15 to 2026-08-15). Following the rotation, a subset of users—approximately 12 of 340—are experiencing authentication failures when attempting to access FieldPulse via SSO.

Error Manifestation

The affected users receive a generic "Authentication failed" message at the FieldPulse login screen after successful authentication at the IdP. I have confirmed that:

  1. The IdP-initiated flow completes successfully on the Okta side (SAML assertion generated, no policy violations)
  2. The SP-initiated flow exhibits identical failure patterns
  3. The discrepancy is not correlated with user role, department, or last login timestamp
  4. Metadata refresh has been performed on both systems

IdP Configuration Details

  • Identity Provider: Okta Workforce Identity Cloud
  • SAML Version: 2.0
  • Binding: HTTP-POST
  • NameID Format: EmailAddress (urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress)
  • Signature Algorithm: RSA_SHA256
  • Certificate Chain: Single certificate, no intermediates

From a governance perspective, I am particularly concerned that the failure is selective rather than universal. This suggests a potential mismatch in attribute mapping or certificate validation logic that is not immediately apparent in the standard integration documentation.

It is worth noting that our previous certificate rotation (August 2024) proceeded without incident using identical procedures.

I have captured SAML assertion samples from both successful and failed authentications. The differences appear minimal, though I observe that the failed assertions contain an additional saml:AuthnContextClassRef node that was not present in our prior configuration. I am uncertain whether FieldPulse's SAML implementation enforces strict schema validation that might reject assertions with this element.

Requesting guidance on:

  1. Whether FieldPulse maintains certificate pinning that would require explicit update on the service provider side
  2. Any known issues with AuthnContextClassRef handling in the current SAML implementation
  3. Recommended debugging steps to capture SP-side validation errors (currently obscured by generic error messaging)

Ticket reference: FP-SAML-20250902-001

Parents
  • Carlos, thank you for the diagnostic framework. Please find the requested information below.

    SAML Response Structure (Failed Authentication)

    <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
        ID="id-abc123"
        IssueInstant="2025-09-02T14:15:30.123Z"
        Version="2.0">
        <saml2:Issuer>www.okta.com/.../saml2:Issuer>
        <saml2:Subject>
            <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
                affected.user@company.com
            </saml2:NameID>
            <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                <saml2:SubjectConfirmationData NotOnOrAfter="2025-09-02T14:20:30.123Z"
                    Recipient="">auth.fieldpulse.io/.../
                >
            </saml2:SubjectConfirmation>
        </saml2:Subject>
        <saml2:Conditions NotBefore="2025-09-02T14:10:30.123Z"
            NotOnOrAfter="2025-09-02T14:20:30.123Z">
            <saml2:AudienceRestriction>
                <saml2:Audience>auth.fieldpulse.io/.../saml2:Audience>
            </saml2:AudienceRestriction>
        </saml2:Conditions>
        <saml2:AuthnStatement AuthnInstant="2025-09-02T14:15:25.456Z"
            SessionIndex="idx_abc123">
            <saml2:AuthnContext>
                <saml2:AuthnContextClassRef>
                    urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
                </saml2:AuthnContextClassRef>
                <saml2:AuthnContextDeclRef>
                    schemas.okta.com/.../step-up
                </saml2:AuthnContextDeclRef>
            </saml2:AuthnContext>
        </saml2:AuthnStatement>
    </saml2:Assertion>

    Comparative Analysis

    AttributeFailedSuccessful
    NotOnOrAfter2025-09-02T14:20:30.123Z2025-09-02T14:18:45.789Z
    AuthnInstant2025-09-02T14:15:25.456Z2025-09-02T14:12:10.234Z
    AuthnContextDeclRefPresent (step-up)Absent
    Clock skew (IdP vs. SP)Confirmed <2 secondsIdentical

    I have confirmed that the 5-minute assertion lifetime is consistent across both populations. The presence of AuthnContextDeclRef with the Okta step-up authentication URI appears to be the discriminating factor.

    Further investigation reveals that the affected users were subject to a recent password policy update requiring MFA enrollment. Users who completed MFA enrollment prior to the certificate rotation are unaffected. This correlation was not initially apparent.

Reply
  • Carlos, thank you for the diagnostic framework. Please find the requested information below.

    SAML Response Structure (Failed Authentication)

    <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
        ID="id-abc123"
        IssueInstant="2025-09-02T14:15:30.123Z"
        Version="2.0">
        <saml2:Issuer>www.okta.com/.../saml2:Issuer>
        <saml2:Subject>
            <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
                affected.user@company.com
            </saml2:NameID>
            <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                <saml2:SubjectConfirmationData NotOnOrAfter="2025-09-02T14:20:30.123Z"
                    Recipient="">auth.fieldpulse.io/.../
                >
            </saml2:SubjectConfirmation>
        </saml2:Subject>
        <saml2:Conditions NotBefore="2025-09-02T14:10:30.123Z"
            NotOnOrAfter="2025-09-02T14:20:30.123Z">
            <saml2:AudienceRestriction>
                <saml2:Audience>auth.fieldpulse.io/.../saml2:Audience>
            </saml2:AudienceRestriction>
        </saml2:Conditions>
        <saml2:AuthnStatement AuthnInstant="2025-09-02T14:15:25.456Z"
            SessionIndex="idx_abc123">
            <saml2:AuthnContext>
                <saml2:AuthnContextClassRef>
                    urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
                </saml2:AuthnContextClassRef>
                <saml2:AuthnContextDeclRef>
                    schemas.okta.com/.../step-up
                </saml2:AuthnContextDeclRef>
            </saml2:AuthnContext>
        </saml2:AuthnStatement>
    </saml2:Assertion>

    Comparative Analysis

    AttributeFailedSuccessful
    NotOnOrAfter2025-09-02T14:20:30.123Z2025-09-02T14:18:45.789Z
    AuthnInstant2025-09-02T14:15:25.456Z2025-09-02T14:12:10.234Z
    AuthnContextDeclRefPresent (step-up)Absent
    Clock skew (IdP vs. SP)Confirmed <2 secondsIdentical

    I have confirmed that the 5-minute assertion lifetime is consistent across both populations. The presence of AuthnContextDeclRef with the Okta step-up authentication URI appears to be the discriminating factor.

    Further investigation reveals that the affected users were subject to a recent password policy update requiring MFA enrollment. Users who completed MFA enrollment prior to the certificate rotation are unaffected. This correlation was not initially apparent.

Children
No Data