Releases: BetaHydri/CrossForestOfflineJoin
Release list
v1.7.2 - Least-privilege cross-forest OU delegation
Security
Set-CrossForestOuDelegation.ps1now grants only Microsoft's least-privilege
domain-join permission set on descendant computer objects instead of the broad
Write all properties right. The delegated writes are scoped to Validated
write to DNS host name, Validated write to servicePrincipalName and Write
Account Restrictions (userAccountControl), plus the existing Reset Password
extended right and Create Child: computer on the OU. Verified end-to-end in a
cross-forest test environment.
Full changelog: v1.7.1...v1.7.2
v1.7.1 - Web UI sign-in banner only on rejected login
Fixed
- Web UI login: the red "Sign-in failed" banner no longer appears on the
first/uivisit or right after signing out. Pode reuses the auth
FailureUrlfor every unauthenticated redirect (first visit, logout and
rejected login), so the previous?failed=1query flag lit the banner in all
three cases. The banner is now driven by Pode'sauth-errorflash message,
which is set only when an actual login POST is rejected - i.e. only for a wrong
user name or password.
Full changelog: v1.7.0...v1.7.1
v1.7.0 - Web UI sign-out button + API-key management docs
Added
- Web UI: a Sign out button on the form and result pages that ends the
server-side session (POST <BasePath>/logout), shown only in
WebUi.AuthMode = 'WindowsAd'(standalone) mode. NewGet-OdjLogoutForm
builder plus a-ShowLogoutswitch onGet-OdjFormBody/Get-OdjResultBody,
wired up from the/ui, provision-error and result render sites. tests/Unit/OfflineJoinWebUi.Tests.ps1: coverage forGet-OdjLogoutFormand
the conditional logout button on the form and result pages.
Changed
docs/quickstart.md,docs/schnellstart.md: new Managing and rotating API
keys section (one-way SHA-256 hashing, the caller keeps the clear-text key,
adding vs. rotating clients, and the warning that re-runninginstall.ps1
overwrites the wholeApiClientsblock). Documented the Web UI Sign out
button in the security model (standalone mode only; IIS/SSO handles sign-out
otherwise).
Full changelog: v1.6.11...v1.7.0
v1.6.11
v1.6.11 — Documentation release
Documentation-only release (no code changes).
Changed
- Multiple API clients on the REST endpoint — clarified in
docs/quickstart.md
anddocs/schnellstart.mdthatApiClientsis an array: the presented
X-Api-Keyis matched against every entry, so any number of clients can be
authorised side by side (the matchedNameis written to the audit log). Added
a concrete multi-client example and a note thatinstall.ps1only writes the
first client — further callers are added by editing theApiClientsarray
inappsettings.psd1directly (one SHA256 hash per key).
v1.6.10
v1.6.10 — Documentation release
Documentation-only release (no code changes).
Added
- Multi-cloud IaC guide —
docs/multi-cloud.md(DE) anddocs/multi-cloud.en.md(EN):
how to drive the web service from Bicep, Terraform and Ansible to offline-domain-join
multi-cloud Windows VMs (Azure, AWS, GCP), with Mermaid diagrams and end-to-end samples.
Linked from the READMEs and the docs index. WebUiconfiguration reference — the settings-reference table indocs/quickstart.md
anddocs/schnellstart.mdnow documents the fullWebUiblock:WebUi.Enabled,
WebUi.AuthMode('WindowsAd'standalone with a hostedAdd-PodeAuthWindowsAdlogin form +
session cookie, or'IIS'),WebUi.AdminGroupandWebUi.BasePath.
Fixed
- Restored the missing CHANGELOG compare links for v1.6.6–v1.6.9.
v1.6.9
v1.6.9
Added
- Web UI result page now has a Download button next to the provisioning
data. It saves the generated payload as a file entirely client-side (no extra
server round-trip): a Base64 blob downloads as<computername>.txtand an
unattend XML fragment downloads as<computername>-unattend.xml. - Docs (
quickstart.md,schnellstart.md): expanded the apply step into an
apply-and-verify walkthrough covering the downloaded blob file
(-BlobPath), the unattend XML fragment, and post-join verification
(systeminfo,nltest,Get-ADComputer).
v1.6.8
Fixed
-
Web UI provisioning form returned HTTP 403 (
reason=csrf) on every resubmission after any form error (invalid computer name, wrong target prefix, or provisioning failure).Two root causes:
- The error re-render rotated the anti-CSRF session token to a new value.
Set-PodeResponseStatus -Code <4xx>rendered Pode's built-in error page and marked the response as sent, so the re-rendered form (carrying the rotated token) was discarded and never reached the browser. The next submit then posted the stale token while the session held the rotated one, failing the CSRF check indefinitely.
The token is now stable per session (no rotation on re-render), and every
Set-PodeResponseStatusthat precedes our own HTML now uses-NoErrorPage- so the form with its inline error message is what the browser receives, and corrected resubmissions succeed.
Deploy
Re-extract this release into your runtime folder (e.g. C:\Install\CrossForestOfflineJoin-main), then restart:
.\src\WebService\Start-OfflineJoinService.ps1 -ConfigPath .\src\WebService\appsettings.local.psd1v1.6.7
Fixed
- Standalone
WindowsAdmode showed no login form and returned HTTP 500
(Cannot bind argument to parameter 'User' because it is an empty string).
The protected/uiroutes were incorrectly flagged with-Login. In Pode a
-Loginroute allows anonymous GET so it can render a sign-in page, so/ui
executed with no authenticated user ($WebEvent.Auth.Userempty) and crashed
before redirecting to the login page. The-Loginflag now applies only to
the dedicated/ui/loginroutes; the protected routes keep plain
authentication and redirect unauthenticated visitors to the login form.
Upgrade
Re-extract this release over C:\Install\CrossForestOfflineJoin-main (or your
runtime folder) and restart the service. No configuration changes are required.
Browse to /ui - you should now be redirected to the sign-in form.
v1.6.6
Fixed
- Web UI (and API) returned a generic HTTP 500 (
The term 'Get-OdjFormBody' is not recognized).
Pode route/auth handlers execute in separate runspaces that only auto-import functions defined
in the entry-point script itself. The audit-logging and HTML-builder helpers live in separately
dot-sourced files (OfflineJoinLogging.ps1,OfflineJoinWebUi.ps1), so their functions were
invisible to those runspaces. The helper scripts are now registered viaUse-PodeScript, which
imports their functions into every runspace. - Added Pode terminal error logging (
Enable-PodeErrorLogging) so unhandled route/auth exceptions
are surfaced on the console instead of only a bare 500.
Changed
docs/quickstart.md,docs/schnellstart.md: corrected theWindowsAdauth description - the
standalone mode serves a hosted HTML sign-in form (backed by a server-side session cookie),
not HTTP Basic.
Upgrade
Re-extract this release over C:\Install\CrossForestOfflineJoin-main (or your runtime folder)
and restart the service. No configuration changes are required.
v1.6.5
Added
src/WebService/Start-OfflineJoinService.ps1: the Web UI can now run without IIS. A newWebUi.AuthModesetting selects the authentication scheme:'WindowsAd'(new default) serves a hosted HTML login form and validates the submitted AD credentials directly against Active Directory over the existing TLS channel, restricted toAdminGroupand backed by a server-side session cookie (with login/logout routes). This makes/uiusable when Pode is self-hosted standalone.'IIS'keeps the previous behaviour, consuming the Windows identity forwarded by IIS's ASP.NET Core Module for seamless Kerberos single sign-on.
src/WebService/OfflineJoinWebUi.ps1: newGet-OdjLoginBodyhelper renders the standalone login form.src/WebService/appsettings.psd1: documents the new optionalWebUi.AuthModekey (defaults to'WindowsAd').
Fixed
- Standalone Web UI requests previously failed with HTTP 401 "No MS-ASPNETCORE-WINAUTHTOKEN header found" because
Add-PodeAuthIISonly works behind IIS. The defaultWindowsAdmode resolves this without requiring IIS.
Documentation
docs/quickstart.mdanddocs/schnellstart.md: the Web UI for AD admins section now documents bothWebUi.AuthModevalues (standaloneWindowsAddefault vs.IIS).README.mdanddocs/README.en.md: the Web UI description, the "Web UI hardening" security bullet, and the architecture-diagram/uilabel reflect the new AD-group authentication with theWindowsAd/IISmodes instead of IIS-only Windows Authentication.