FlightCheck: Check Workday SOAP/REST integration certificate validity…#127
Conversation
|
@microsoft-github-policy-service agree company="Microsoft" |
There was a problem hiding this comment.
Pull request overview
This PR adds a new FlightCheck checkpoint (WD-CONN-102) to assess Workday SAML signing certificate health by reading Workday SAML enterprise app servicePrincipal certificate metadata from Microsoft Graph, emitting MANUAL/WARNING/FAILED/NOT_CONFIGURED/SKIPPED as appropriate, and documenting the operator-side Workday thumbprint comparison step.
Changes:
- Extend the Graph client to support
$selectprojection on/servicePrincipalsand add a Workday SAML-specific listing helper that always projects certificate-related fields. - Add WD-CONN-102 implementation to
checks/workday.py(cert grouping, active-cert selection, bucketing) and wire it to run before the “no Workday integration” early return. - Add Graph mocks + a comprehensive end-to-end test suite for WD-CONN-102, and update the FlightCheck validation matrix + remediation guide docs.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/mocks/graph.py | Extends the service principal mock with keyCredentials + preferredTokenSigningKeyThumbprint and adds a key_credential() builder. |
| tests/flightcheck/checks/test_workday_saml_certificate.py | New integration-style tests covering WD-CONN-102 statuses, rollover selection, bucketing, and request $select behavior. |
| solutions/ess-maker-skills/src/reference/ess-docs/flightcheck/validation-matrix.md | Documents the new WD-CONN-102 checkpoint in the validation matrix. |
| solutions/ess-maker-skills/src/reference/ess-docs/flightcheck/remediation-guide.md | Adds operator remediation steps for WD-CONN-102 across FAILED/WARNING/MANUAL outcomes. |
| solutions/ess-maker-skills/scripts/flightcheck/graph_client.py | Adds $select support to service principal listing and introduces get_workday_saml_service_principals() + select constant. |
| solutions/ess-maker-skills/scripts/flightcheck/checks/workday.py | Implements WD-CONN-102 certificate logic and wires it into the Workday checks pipeline. |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
srideshpande
left a comment
There was a problem hiding this comment.
The PR title/description feel a bit confusing to me. Are we actually checking a certificate used by the Workday SOAP/REST integration itself, or are we checking the SAML signing certificate on the federated Workday Enterprise App in Entra?
From the implementation, it seems like the latter. If so, could we clarify the title/description to say “Workday SAML / Enterprise App certificate health” or something in those lines, rather than “SOAP/REST integration certificate” so the scope is clearer?
Checkpoint: WD-CONN-102
Category: Workday
Priority: High
Status emitted: MANUAL on the healthy path (operator compares the Entra thumbprint against the matching Workday "Edit Tenant Setup - Security → SAML Identity Providers" row). Auto-escalates to FAILED (no AsymmetricX509Cert keyCredentials / all expired / active selection expired with rollover live), WARNING (active cert within CERT_EXPIRY_WARN_DAYS=30 of NotAfter, or NotBefore in the future, or 401/403 consent), NOT_CONFIGURED (no federated Workday SAML enterprise app), SKIPPED (Graph unavailable).
Conditional? No — runs before the no-Workday early-return gate in run_workday_checks so the warning fires pre-install.
Why MANUAL is the right shape on the healthy path
ESS Workday connectors use Basic auth + Entra SSO; there is no certificate stored on the Power Platform connection record. The cert the spec's failure mode describes is the SAML signing cert on the federated Workday enterprise app's servicePrincipal (reachable via Microsoft Graph). The matching cert uploaded to Workday's tenant security setup has no Workday API surface (SOAP RaaS / Worker services don't expose tenant security config; WQL admin is gated by the documented chicken-and-egg blocker). AGENTS.md design principle #2 introduces MANUAL specifically for this case — canonical reference AUTH-006, commit 53f3762, fixes #84. WD-CONN-102 reuses the pattern with the addition that Entra-side data is rich enough to programmatically classify expiry/missing/all-expired states into FAILED/WARNING directly.
API tier
Microsoft Graph v1.0 — validatable tier per tests/fixtures/cassettes/INDEX.md. No cassette / no registry changes. Extends existing tests/mocks/graph.py service_principal() with key_credentials and preferred_token_signing_key_thumbprint kwargs, adds a key_credential() builder for the keyCredential complex type — both CSDL-cited. Docstrings updated to list WD-CONN-102 as a consumer.
What the check observes vs. delegates
Entra side (observed via Microsoft Graph):
Workday side (MANUAL operator):
Pattern decisions
Tests
tests/flightcheck/checks/test_workday_saml_certificate.py covers:
remediation-guide.md and validation-matrix.md updated. Local suite: N passed, M skipped, 0 regressions (fill in after pytest). ruff check clean on touched files.