As of September 2026 (Server 1.0.31, Agent 1.0.36)

Devices without a domain (API key)

1. What is this?

By default, ZeroPortal authenticates devices and users through Kerberos; a domain member needs no key management for that. This document describes the second path, for devices that do not belong to a domain — workgroup machines, a device in a branch office without a domain, a service provider's laptop.

You generate a rollout token in the portal. The token is not a secret — it only lets someone request their own key, so it may travel inside an installation command line. At the first sync, the agent trades it for a lasting machine key; a locally signed-in user also gets their own user key. That lets the device fetch packages and policies like a domain member, and it shows up in the portal under Known clients.

This path is experimental: it works, but it is meant for pilot installs and single devices, not a large rollout. It delivers MSIX packages in the user context; App-V, App Attach, and machine-wide installs are not possible on such devices (section 4.4).

2. What is this good for?

One portal serves domain clients over Kerberos and key-based clients side by side.

3. How do I use this?

Prerequisites:

Item Detail
Network The device can reach the portal's HTTPS port (e.g. 8080). Without DNS, a hosts-file entry is enough.
Certificate The device must trust the portal's TLS certificate (section 3.2).
Package access A read-only account on the package share (section 3.3).
Agent The agent MSI from the portal (Downloads).

3.1 Preparing the portal

On the Global Configuration → Agent enrollment page (full administrators only):

  1. On the Rollout tokens card, switch Key-based access on. As long as it is off, every enrollment and every issued key is refused.
  2. Create a token: Name (e.g. "Rollout site Hanover"), Valid (days) — defaults to 14, allowed range 1 to 365 — and Create. The dialog shows the token value (starts with zpe_) and the finished install line (Roll out with the installer); the group policy variant is meant only for domain-joined devices.
  3. Show token value reveals the value again later — on a high-availability installation, only on the node where the token was created.
  4. The table shows, per token, whether its enrollment window is open or closed and until when it applies. Reopen for 14 days extends an expired window and keeps the token value; Open/Close switches the window by hand.

By PowerShell (the server's module): Get-, New-, Set-, Remove-ZeroPortalEnrollmentToken, plus Get- and Set-ZeroPortalApiClient.

3.2 Install the agent

The line from the token dialog contains the portal URL, the token, and the three sync switches, which are off out of the box. For a self-signed portal certificate, append TRUSTCERT=1; for a silent install, /qn:

msiexec /i ZeroPortalAgent.msi SERVER=https://portal.firma.tld:8080 ENROLLTOKEN=zpe_... MSIXSYNC=1 POLICYSYNC=1 TRUSTCERT=1 /qn

You can leave out APPVSYNC=1 — App-V cannot be used on such devices. These switches are permanent: a later update without the parameters does not undo them.

Certificate. With TRUSTCERT=1, the service installs a portal certificate whose chain it does not validate into the computer's trusted root store during the first machine sync (trust on first use — only for servers from its own server list; a regularly valid certificate is never touched; event 2013). Alternatively, import the certificate by hand into the computer store — the browser's trusted sites are not enough. Afterwards: Set-ZPAgentConfiguration -TrustServerCertificate $true.

What happens next. 30 seconds after the service starts, the first machine sync runs: the agent uses the token to request a machine key (event 2510), and the device appears under Known clients. During the user sync, a local user account fetches its own key and appears under Known users as user@devicename.

3.3 Read-only account and package share

The device cannot read the package share with a domain identity. Do not set up anonymous access — instead, use a local account on the file server that is allowed to read only.

  1. Create a local account on the file server (e.g. PackageShare_RO, password never expires):

Local read-only account on the file server

  1. Give this account the NTFS permission Read & execute on the package folder. At the share level, the Everyone entry from the Administration Handbook is enough (chapter 3, "Setting up the package share"):

Package share properties

3.4 Policy: SMB connection with credentials

The agent builds the connection to the share through a drive policy. The SMB session lasts the whole sign-in session; package delivery reaches the UNC path this way without a drive having to appear in Explorer.

  1. Under Policies, use New set to create a policy set, e.g. "APIClients":

New policy set

Create the "APIClients" set

  1. Use Edit scope to narrow the scope to the target devices, e.g. by computer name with wildcards (* and ?). The filter is evaluated locally and needs no Active Directory:

Scope of the set

Computer-name filter with wildcard

  1. Add policy → template Mount drives:

Add policy

  1. Fill in the drive entry like this:

Drive policy with credentials

Field Value Note
Action Update (connect or change) Default
Drive letter empty With no letter, only the SMB session is built.
UNC path \\fileserver\pakete$ The same server name as in the portal's package repository.
Application (Sync/Async) Synchronous (Sync waits) Required: this makes sure the connection stands before packages are deployed (section 4.5).
Username (optional) FILESERVER\PackageShare_RO The read-only account
Password (optional) ●●● Stored encrypted on save
  1. Set the record to Active. At the next user sync, the agent log shows:

INF [2614] Policy SMB session established: \\fileserver\pakete$

Security. The password is stored and sent encrypted, but any device that receives the policy can read it — obfuscation, not secrecy (the same lesson as cpassword in group policy). So this policy should only ever carry a read-only account, never a privileged one; with read rights on package files alone, it is not a worthwhile target.

3.5 Entitling and checking packages

INF [2614] Policy SMB session established: \\fileserver\pakete$ INF [2400] AddPackage (current user): file://fileserver/pakete$/MSIX/... INF [2519] User sync done — installed=1 ... - Tray: the card shows progress. Installs that take minutes without internet access are explained in Known issues.

4. Rules: when does what apply

4.1 Key model

4.2 Token window

4.3 Disable or delete

Under Known clients, two actions look similar but differ a lot:

Activate/deactivate key Delete client and key
Effect The portal rejects the key right away; the device stays listed. The row, the key, and every assignment (package entitlements, portal-group membership, module rights) are removed.
Permissions kept lost
Way back Re-enable — the device carries on. The device does not re-enroll on its own: it keeps sending its old key, the portal rejects it, the sync fails.

Disabling is the move for "lock out for now"; deleting is for cleaning up devices that are not coming back. Deleting a registered user under Known users also removes their key.

To enroll a deleted device again, remove the key locally — there is no cmdlet for this:

reg delete HKLM\SOFTWARE\NickIT\ZPAgent\Auth /v ApiKey /f
Restart-Service ZeroPortalAgent

The machine sync after the restart enrolls the device again, provided the token is still stored and its window is open. To remove a user key, delete the value ApiKey under HKCU\SOFTWARE\NickIT\ZPAgent\Auth in the user's own context and trigger the user sync (tray icon or Sync-ZPAgentPublishingServer -Method User).

4.4 Limits

4.5 Order in the user sync

The user sync processes policies first, then packages. Drives set to Synchronous (Sync waits) are connected inside the policy run; asynchronous ones run on a background track with a 120-second guard that package delivery does not wait for. That is why the drive carrying the credentials must be synchronous. The agent setting Policy/AsyncDrivesPrinters = 0 turns the background track off entirely.

4.6 Licensing

Enrolled devices and users count like domain clients within the licensing 90-day window; 30 licences are included. If none are free, the portal refuses the licence booking but keeps delivering. The agent asks again every four hours and shows the user a notice each time. Details in Users, permissions, licences and logs.

5. Operations and troubleshooting

Where to look:

Symptom Cause Fix
Device does not appear under Known clients; agent log has no event 2510 No token on the device (ENROLLTOKEN forgotten) Add the token (rerun the MSI with ENROLLTOKEN=, or set the registry value, see appendix) and restart the service
Device does not appear; portal log shows Enrollment: refused … no enabled token matched Token window closed or expired, or the token value was copied wrong Reopen for 14 days; compare the value with Show token value
Device does not appear; the token dialog shows a warning Key-based access switch is off Turn the switch on
Event 3505/3506 "No publishing server reachable" Portal unreachable: name resolution, port, or certificate Check the hosts entry or DNS and the port; set TRUSTCERT=1 or import the certificate into the computer store
Event 3504 "Publishing server list is EMPTY" SERVER= left out at install time Run Add-ZPAgentPublishingServer, or rerun the MSI with SERVER=
Event 3504 "answered with an error", portal log ApiKey: rejected request Key disabled, client deleted, or the switch is off Enable the key; after a deletion, remove the key locally (section 4.3)
User does not appear under Known users A domain account is signed in (gets no key), or the user sync hasn't run yet Use a local account; trigger the user sync from the tray icon
Event 4613, message "error 1219" Windows already holds an SMB session with different credentials to the same server net use * /delete, or sign out and back in
Event 4613 with a different error Wrong read-only account, password, or UNC path; share or NTFS permission missing Test the credentials on the file server; check both permission levels
Deployment fails at the source, event 2614 missing Drive policy is not taking effect: the record is not Active, the scope does not match, or Application is set to Asynchronous Check the record and the filter; set Synchronous (Sync waits)
Deployment fails at the source, event 2614 present The server name in the policy differs from the package repository, or the read-only account cannot read the package folder Use the same server name; check NTFS rights on the package folder
Deployment takes several minutes (event 3410) Signature checking is waiting on an internet connection Known issues
"No licence free" notice every four hours Licence window exhausted Check licences; packages are still delivered

6. Appendix: technical reference

Enrollment on the device

Key Value Content
HKLM\SOFTWARE\NickIT\ZPAgent\Auth EnrollmentToken Rollout token in clear text (from ENROLLTOKEN)
HKLM\SOFTWARE\NickIT\ZPAgent\Auth ApiKey Machine key, DPAPI-protected (machine)
HKCU\SOFTWARE\NickIT\ZPAgent\Auth ApiKey User key, DPAPI-protected (user)
HKLM\SOFTWARE\Policies\NickIT\ZPAgent\Auth EnrollmentToken Token via group policy; takes precedence over the local value
HKLM\SOFTWARE\NickIT\ZPAgent\Agent TrustServerCertificate (DWORD 1) Same as TRUSTCERT=1
HKLM\SOFTWARE\NickIT\ZPAgent\Servers\1 Url, Name Publishing server from SERVER=

Group policy (domain-joined devices only): Computer Configuration → Administrative Templates → NickIT → ZeroPortal Agent → Authentication → Enrollment token; ADMX template under C:\Program Files\NickIT\ZeroPortalAgent\admx.

Events in the agent log

ID Meaning
2013 Portal certificate adopted into the computer's root store (TRUSTCERT)
2014 Certificate check for a server failed
2510 Enrollment succeeded, key stored (machine or user)
2511 Enrollment attempt failed (as a warning; the same ID reports package operations as info)
2614 SMB session established, or drive connected
4613 Drive policy failed (e.g. error 1219)
2400 Package install started in the user context
2519 User sync finished
2530 Licence notice from the portal (e.g. no licence free)
3410 Deployment took longer than the threshold
3504 Machine sync: no server configured, or a server answered with an error
3505, 3506 Machine sync: no server reachable (retry / offline state)
3514–3516 Same, for the user sync