Every save on /app/platform/security/settings fails with Invalid reference: 'temp' against SystemAuthProfile. The cause is that the security-properties resource still points at the deleted temp user source, and the Identity Provider mode hides the field that holds that pointer. The fix has three parts: repoint SystemAuthProfile at a live user source, switch back to Identity Provider, and only then delete temp through the reference-checked path.
Where does the security-settings save request stop?
The request starts in the browser on the gateway web UI page /app/platform/security/settings. When you change any field on that page and save, the page posts the whole security-properties resource to the gateway configuration API, not only the field you changed. On this gateway the edited field was Gateway audit profile. The gateway then validates every property in the resource, including properties the current UI mode does not display. Validation fails on SystemAuthProfile, and the gateway returns the rejection to the page:
{"messages":[],"fieldMessages":[{"fieldName":"SystemAuthProfile","messages":["Invalid reference: 'temp'"]}]}
The request is well formed. Nothing fails at the network or authentication layer. The gateway's own reference validation rejects the resource because one property names a user source that no longer exists. Changing the audit profile, or any other field, only triggers the validation. The broken reference was already stored.
| Hop | What it carries | Result on this gateway |
|---|---|---|
| Browser → gateway web UI | Edited security settings form | Delivered |
| Web UI → configuration API | Full ignition/security-properties resource |
Delivered |
| Configuration API → reference validation | Each property that references another resource | Stops at SystemAuthProfile → 'temp'
|
| Validation → page |
fieldMessages array |
Error shown; nothing persisted |
Check before moving on:
- Open the browser developer tools and select the Network tab.
- Change one field on the security settings page and save.
- Confirm that the response body contains
"fieldName":"SystemAuthProfile".
If a different fieldName appears, a different stale reference exists. Apply the same method below to that property.
How did 'temp' end up in SystemAuthProfile?
This gateway followed this sequence:
- The gateway password was reset with
gwcmd -p. That reset created a user source namedtemp, and the security settings were left referencing it. - Designer Authentication Strategy was switched to Identity Provider, because the site authenticates through SAML.
- The Ignition-created
tempuser source was deleted. - A later edit to the security settings failed validation.
In Identity Provider mode, the user-source selector for Classic mode is hidden because that mode does not need it. Hiding the field does not clear its stored value. After the password reset, that selector held temp. When temp was deleted, the hidden value became a dangling reference. The validator checks the stored resource, not the visible form, so it still rejects the save.
Two settings share this page and are easy to confuse. The Designer Authentication Strategy controls how Designer sessions authenticate. The system user source controls who can make gateway configuration changes. The property that fails is SystemAuthProfile, the reference the deletion API reports under ignition/security-properties. On this gateway, the selector that held temp appeared under Designer Authentication Strategy > Classic. Switch the mode and watch which dropdown shows temp to confirm which UI control writes SystemAuthProfile on your build.
| Symptom | Cause | Where to look |
|---|---|---|
Invalid reference: 'temp' on any security settings save |
SystemAuthProfile still names the deleted temp user source |
Classic mode selector (hidden while Identity Provider is active) |
| No field is highlighted red on the page | No UI indication is shown for a hidden field that fails validation | Save response body in developer tools |
| A deletion warning appeared but gave little detail | The warning lists references tersely; confirming it forces the deletion | Deletion API response references array |
A stray trailing 1 at the end of the validation text |
Cosmetic defect in how the validation message renders | Ignore; the message content is still accurate |
Check before moving on: switch Designer Authentication Strategy to Classic without saving. Confirm that the user-source dropdown shows temp, or shows a blank or invalid entry where temp used to be. That field is the one to fix.
Which resources still reference the user source?
User source deletion in 8.3 has a two-step guard. A standard delete request against a user source that other resources reference does not delete it. The gateway returns HTTP 200, meaning the request was received and valid, with "success": false and a list of the resources that point at the target. The request only completes when you resend it with confirm=true. The UI sends that when you accept the warning dialog.
The same call works as a read-only reference audit. A request against the default user source on a stock gateway looks like this:
<gateway>/data/api/v1/resources/ignition/user-source/default/<resource-hash>?confirm=false&collection=core
{
"success": false,
"changes": [],
"problem": null,
"references": [
{
"type": "ignition/security-properties",
"name": "security-properties",
"property": "SystemAuthProfile"
}
]
}
Omitting confirm produces the same response as confirm=false. Read the <resource-hash> segment from the request the web UI sends when you click delete on a user source. Cancel the dialog before it resends with confirmation.
| Query parameter | Response | Effect on the resource |
|---|---|---|
confirm=false or omitted |
200, "success": false, references populated |
Nothing deleted |
confirm=true |
Deletion proceeds | User source removed; every listed reference now dangles |
collection=core |
Selects the resource collection being addressed | Leave it as the UI sends it |
Check before moving on: run the unconfirmed delete against the user source you plan to make the new SystemAuthProfile target, such as default. An empty references array is fine here. You only need to know that the source exists and resolves.
How do you repoint SystemAuthProfile to a live user source?
The hidden field is only editable in Classic mode. Surface it, correct it, then restore Identity Provider mode. Do both steps before any other edit, because every save validates the whole resource.
- Open
/app/platform/security/settings. - Set Designer Authentication Strategy to Classic so the user-source selector appears.
- In that selector, replace
tempwith a user source that exists and holds a working admin account. For example, usedefaultor the production user source. - Set Designer Authentication Strategy back to Identity Provider. The SAML configuration is not affected because the Classic selector is independent of it.
- Save once.
If your build refuses the save in Classic mode, use a fallback. Recreate a user source named exactly temp so the dangling reference resolves again, then save. Next, repoint the selector with the procedure above and save again. After that, temp is unreferenced and can be removed cleanly.
Before you save, confirm that the new target user source contains an account with gateway configuration rights. If SystemAuthProfile points at a source with no admin role, you lock yourself out of configuration changes. That lockout is the same situation that required gwcmd -p in the first place.
Check before moving on: in developer tools, the save response must not contain a fieldMessages entry for SystemAuthProfile. Reload the page, switch to Classic without saving, and confirm the selector shows the new user source. Then leave the page without saving.
How do you remove the temp user source without breaking references?
Once SystemAuthProfile points elsewhere, temp should have no referrers. Confirm that before deleting.
- Start the delete of
tempfrom the user sources page. - If the gateway shows a references warning, cancel it. In developer tools, inspect the unconfirmed response and read its
referencesarray. - For each entry, open the resource named by
typeandname, and change the listedpropertyto a live source. - Repeat the unconfirmed delete until the gateway deletes
tempwithout a warning, or untilreferencescomes back empty.
Do not accept the confirmation dialog while references remain. Confirming sends confirm=true, which forces the deletion and recreates the fault. The forced path exists for cases where you delete a resource and immediately replace it with another of the same name. It is not a shortcut around cleaning up references.
Check before moving on: the user sources list no longer shows temp, and no warning appeared during the final delete.
Which defects remain after the fix is applied?
The underlying behavior is tracked as IGN-14158. Two UI defects make this failure hard to diagnose, and both still exist after you correct the configuration:
| Defect | Impact | Status |
|---|---|---|
| No UI indication when a field that is hidden (because it is unused) fails validation | The page shows an error but highlights no visible field. You have to find SystemAuthProfile manually. |
New ticket opened; not included in the 8.3.0 release |
Trailing 1 appended to the validation warning or error text |
Cosmetic only | Ticketed, low priority |
| Deletion warning for referenced resources is terse | Easy to confirm through it without understanding the consequence | Design choice: the references list is the real signal |
Until the hidden-field indication ships, treat any security settings save error that highlights no field as a hidden-field reference. Read fieldMessages[].fieldName from the response, then switch UI modes until that field is visible.
How do you prove the gateway security configuration is clean end to end?
-
Security settings save: change
Gateway audit profile, or any other field, on/app/platform/security/settingsand save. The response carries nofieldMessages, and the change persists after a page reload. - Mode state: confirm Designer Authentication Strategy reads Identity Provider after reload.
-
Hidden reference: switch to Classic without saving. The selector shows the live user source, not
tempor a blank. Leave without saving. -
Reference audit: run an unconfirmed delete (
confirm=false) against the user source now inSystemAuthProfile. Thereferencesarray listsignition/security-properties/SystemAuthProfile, which proves the pointer resolves to it. Cancel without confirming. - Designer login: open the Designer and authenticate through the SAML identity provider.
-
Configuration rights: log in to the gateway web UI with an account from the user source that
SystemAuthProfilenow references, and save a harmless configuration change.
FAQ
What happens if I confirm deletion of an Ignition 8.3 user source that other resources still reference?
The UI resends the delete with confirm=true, and the user source is removed regardless of its referrers. Every property listed in the earlier references array is left pointing at a missing resource. Saving those resources then fails with Invalid reference until you repoint them or recreate a source with the same name.
What happens if I run gwcmd -p on an Ignition 8.3 gateway?
The password reset creates a user source named temp, and the security settings are left referencing it. After you regain access, repoint SystemAuthProfile (the Classic-mode user-source selector) to a permanent user source first. Only then delete temp.
What happens if Designer Authentication Strategy is Identity Provider but the Classic user source is invalid?
The Classic field is hidden but still validated, so every save of /app/platform/security/settings fails with a fieldMessages entry for SystemAuthProfile. To clear it, switch to Classic, select a valid user source, switch back to Identity Provider, and save once.
Why does the Ignition 8.3 validation error end with a stray "1"?
This is a known cosmetic defect in how the validation message renders. It has been ticketed at low priority. The message content, such as Invalid reference: 'temp', is still accurate and identifies the field to fix.