-
OpenPXE v0.5.1 Pre-Release
released this
2026-05-31 02:10:37 -04:00 | 26 commits to main since this releaseOpenPXE v0.5.1
SAML SSO goes live, and the Settings/Storage tabs get a cleanup.
✨ Single sign-on (SAML 2.0) — now wired end-to-end
SSO configuration has been storage-only since v0.4.5 (you could paste your
IdP metadata, but it didn't log anyone in). v0.5.1 wires the real flow.- "Sign in with " on the login page now starts an SP-initiated SAML
login: OpenPXE builds anAuthnRequest, redirects to your IdP, and the new
/api/sso/acsendpoint consumes the signedSAMLResponse, mints an
operator session, and drops you on the dashboard. - IdP-initiated login is supported too, gated behind a new
"Allow SSO login initiated by identity provider" toggle (off by default) —
mirroring FleetDM. - Pure-Rust, no OpenSSL. Signature verification + exclusive XML
canonicalization run on the pure-Rustbergshamra
crate (RustCrypto,#![forbid(unsafe_code)]). The container stays a fully
static, OpenSSL-free musl binary — noxmlsec/libxml2C dependencies. - Security checks are the ones that matter for an SP: the signature is
verified against your IdP's pinned certificate only (an attacker can't swap
in their own key viaKeyInfo), with XML-Signature-Wrapping defenses, plus
Status / Destination / Audience / time-window validation,InResponseTo
correlation, IdP-initiated gating, and an assertion-replay guard. - Access model: any user your IdP authenticates and OpenPXE
cryptographically verifies gets an operator session. OpenPXE stays
single-tier (no user/role table); the local admin account remains a
guaranteed fallback owner regardless of SSO state. - New SSO settings: Entity ID (defaults to your public base URL) and the
IdP-initiated toggle. A newGET /api/sso/metadataendpoint serves OpenPXE's
SP metadata for easy import into your IdP.
Scope for this release: assertions must be unencrypted, AuthnRequests are
sent unsigned (your IdP must not require client signatures), and the NameID
is the user's email. Single Logout and encrypted assertions are not yet
supported.🧹 UI cleanup
- Advanced tab folded into Settings. The standalone Advanced sidebar
entry is gone; its webhook/email notification settings and the API reference
now live in a collapsible "Advanced" section at the bottom of Settings. - Storage → "Remote shares". The separate SMB shares and NFS shares
cards are merged into one Remote shares card with a protocol dropdown
(SMB / NFS) and a single, protocol-badged table. Same backends, far less
clutter — and room for Config files down the road.
✅ Quality
- 17 new SAML SP unit tests (accept the valid case; reject tampered, unsigned,
wrong-key, wrong-audience, expired, future-dated, wrong-issuer, and
non-success responses) + 6 ACS integration tests (happy path, IdP-initiated
gating, SP request correlation, assertion replay, garbage input). - Full workspace: 206 tests green, clippy clean.
🐳 Pull it
docker pull gitea.milesward.dev/mward4/openpxe:0.5.1 # or docker pull gitea.milesward.dev/mward4/openpxe:latestDownloads
- "Sign in with " on the login page now starts an SP-initiated SAML