User Management API¶
This API provides a way to manage FWD user accounts through REST endpoints, supporting full CRUD (Create, Read, Update, Delete) operations. It allows listing all users, retrieving individual user details, creating new users, cloning existing users, updating user properties, and deleting users. Additionally, it provides the ability to query group memberships for a given user.
The work on this feature was implemented in #10809.
Configuration¶
User Management API is a sub-module of Administration REST API. In order to enable user management support in FWD, the global REST API must be enabled. Please see the setup section. There are no additional requirements for this sub-module.
Add Permissions for the User Management API¶
In order to have access to the user management API, you need to add permissions. This is done via ACLs in the following manner:
<node class="container" name="security">
<node class="container" name="acl">
<node class="container" name="webservice">
<node class="container" name="000100">
<node class="resource" name="resource-instance">
<node-attribute name="reference" value="ADMIN:GET:/admin/security/users"/>
<node-attribute name="reftype" value="FALSE"/>
</node>
<node class="webServiceRights" name="rights">
<node-attribute name="allow" value="true"/>
</node>
<node class="strings" name="subjects">
<node-attribute name="values" value="restAdmin"/>
</node>
</node>
<node class="container" name="000200">
<node class="resource" name="resource-instance">
<node-attribute name="reference" value="ADMIN:GET:/admin/security/users/.*"/>
<node-attribute name="reftype" value="FALSE"/>
</node>
<node class="webServiceRights" name="rights">
<node-attribute name="allow" value="true"/>
</node>
<node class="strings" name="subjects">
<node-attribute name="values" value="restAdmin"/>
</node>
</node>
<node class="container" name="000300">
<node class="resource" name="resource-instance">
<node-attribute name="reference" value="ADMIN:POST:/admin/security/users"/>
<node-attribute name="reftype" value="FALSE"/>
</node>
<node class="webServiceRights" name="rights">
<node-attribute name="allow" value="true"/>
</node>
<node class="strings" name="subjects">
<node-attribute name="values" value="restAdmin"/>
</node>
</node>
<node class="container" name="000400">
<node class="resource" name="resource-instance">
<node-attribute name="reference" value="ADMIN:POST:/admin/security/users/.*"/>
<node-attribute name="reftype" value="FALSE"/>
</node>
<node class="webServiceRights" name="rights">
<node-attribute name="allow" value="true"/>
</node>
<node class="strings" name="subjects">
<node-attribute name="values" value="restAdmin"/>
</node>
</node>
<node class="container" name="000500">
<node class="resource" name="resource-instance">
<node-attribute name="reference" value="ADMIN:PUT:/admin/security/users/.*"/>
<node-attribute name="reftype" value="FALSE"/>
</node>
<node class="webServiceRights" name="rights">
<node-attribute name="allow" value="true"/>
</node>
<node class="strings" name="subjects">
<node-attribute name="values" value="restAdmin"/>
</node>
</node>
<node class="container" name="000600">
<node class="resource" name="resource-instance">
<node-attribute name="reference" value="ADMIN:DELETE:/admin/security/users/.*"/>
<node-attribute name="reftype" value="FALSE"/>
</node>
<node class="webServiceRights" name="rights">
<node-attribute name="allow" value="true"/>
</node>
<node class="strings" name="subjects">
<node-attribute name="values" value="restAdmin"/>
</node>
</node>
</node>
</node>
</node>
For the definition of admin-rest FWD user, please see the REST API Setup/Configuration.
By setting these, you will allow requests of the following types at the following paths:
| Method | Path | Description | Body Required |
|---|---|---|---|
GET |
/admin/security/users |
List all user accounts | No |
GET |
/admin/security/users/<name> |
Get details of a specific user | No |
GET |
/admin/security/users/<name>/groups |
List groups for a specific user | No |
POST |
/admin/security/users |
Create a new user account | Yes (name required) |
POST |
/admin/security/users/<name>/clone |
Clone an existing user account | Yes (name required) |
PUT |
/admin/security/users/<name> |
Update an existing user account | Yes |
DELETE |
/admin/security/users/<name> |
Delete a user account | No |
User Object Reference¶
The following table describes all the fields of a user object as used in request and response payloads. All response payloads always include every field; fields that are not set for a given user appear as null.
| Field | Type | Required | Unique | Description | Used In |
|---|---|---|---|---|---|
name |
String | Yes | Yes | The user account name (subject ID). Must be unique across all accounts (users and groups). | Request & Response |
email |
String | No | Yes (when set) | The user's email address. Must be unique across all users when provided. Can be null. |
Request & Response |
oidcUuid |
String | No | Yes (when set) | OIDC UUID for SSO authentication. Must be unique across all users when provided. Can be null. |
Request & Response |
enabled |
Boolean | No | No | Whether the account is enabled. Defaults to false if not specified. |
Request & Response |
person |
String | No | No | The account owner's description/name. Can be null. |
Request & Response |
alias |
String | No | No | Truststore alias of the associated certificate entry. Can be null. |
Response only |
osUser |
String | No | No | Associated OS user ID. Can be null. |
Request & Response |
password |
String | No | No | Plain text password (will be hashed server-side). Not required for SSO-authenticated users. When set, protect is automatically set to true. |
Request only |
protect |
Boolean | No | No | Whether password protection is in effect. Automatically set to true when a password is provided. Must be false for SSO-only users that authenticate via OIDC. |
Response only |
mode |
Integer | No | No | Authorization mode override for this account. Defaults to 0 (no override / inherit from group or server defaults). |
Request & Response |
authPlugin |
String | No | No | Custom authentication plugin class name. Can be null to use the default. |
Request & Response |
groups |
String[] | No | No | Array of group names the user belongs to. Each referenced group must already exist. Can be null or empty. |
Request & Response |
passwordChanged |
Long | N/A | No | Timestamp (milliseconds since epoch) of when the password was last changed. Set automatically by the server when a password is assigned. null if no password has ever been set. |
Response only |
API Routes¶
The User Management API has the following capabilities:
- Login: the login and logout operations are provided by the main module. For an example of how this is achieved, take a look at REST Admin Authentication.
The bash examples build on Administration REST API so use that as a basis, especially login, logout, api and handling of the session ID.
List All Users¶
List all FWD user accounts by performing a GET request at /admin/security/users. The header must contain the FwdSessionId token. No body is required.
- The response body will be a JSON object containing a
usersarray. Each entry includes all user account fields. Fields that are not set for a given user appear asnull.
Get User Details¶
Retrieve detailed information about a specific user by performing a GET request at /admin/security/users/<name>. The header must contain the FwdSessionId token. No body is required.
- The response body will be a JSON object containing all user account properties. Fields that are not set appear as
null. - If the user does not exist, a
404 Not Foundresponse is returned with an error message.
Show BASH sample - Get user details
List Groups for a User¶
Retrieve the groups a specific user belongs to by performing a GET request at /admin/security/users/<name>/groups. The header must contain the FwdSessionId token. No body is required.
- The response body will be a JSON object containing a
groupsarray. Each entry hasnameanddescriptionproperties.
Show BASH sample - List user groups
Create a New User¶
Create a new FWD user account by performing a POST request at /admin/security/users. The header must contain the FwdSessionId token. The body must be a JSON object containing at least the name field.
- On success, the response body will be a JSON containing
{"success": true}. - On failure, the response returns HTTP
400 Bad Request. - The
namefield is required. All other fields are optional.
Show example - failure (missing name)
Show BASH sample - Create a new user
Clone a User¶
Clone an existing user account by performing a POST request at /admin/security/users/<name>/clone. The header must contain the FwdSessionId token. The body must be a JSON object containing at least the name field for the new clone.
Because certain user fields must be unique (see the User Object Reference), the clone operation automatically sets the email and oidcUuid fields to null on the cloned user by default. You can provide new values for these fields in the request body to assign them to the clone instead.
<name>in the URL is the source user to clone from.- The body
namefield specifies the new user's name (required). - The optional
emailfield sets the email for the cloned user. If omitted, it defaults tonull(to avoid uniqueness violations with the source user). - The optional
oidcUuidfield sets the OIDC UUID for the cloned user. If omitted, it defaults tonull(to avoid uniqueness violations with the source user). - The optional
copyAclsboolean field controls whether ACLs are copied from the source user (defaults tofalse). - The optional
passwordfield sets a new password for the cloned user. If omitted, the cloned user inherits the source user's password settings. - On success, the response body will contain
{"success": true}.
Show example - clone with ACLs
Show BASH sample - Clone a user
Update a User¶
Update an existing user account by performing a PUT request at /admin/security/users/<name>. The header must contain the FwdSessionId token. The body must be a JSON object with the user properties to update.
<name>in the URL identifies the user to update and takes priority over anynamefield in the body.- On success, the response body will contain
{"success": true}. - On failure, the response returns HTTP
400 Bad Request. - Only the fields provided in the body will be applied; Allows you to change only specific fields, and also setting them to null in the JSON will delete the value for that user.
Show example - update email and person
Show BASH sample - Updating email and person info
Show example - change password
Show BASH sample - Change password
Show example - disable a user account
Show BASH sample - Disable a user
Show example - update group memberships
Show BASH sample - Update group membership
Delete a User¶
Delete an existing user account by performing a DELETE request at /admin/security/users/<name>. The header must contain the FwdSessionId token. No body is required.
<name>in the URL identifies the user to delete.- On success, the response body will contain
{"success": true}. - On failure, the response returns HTTP
400 Bad Request.
Show BASH sample - Delete a user
Error Handling¶
The API uses standard HTTP status codes to indicate the outcome of each request:
| Status Code | Description |
|---|---|
200 OK |
The request was processed successfully. |
400 Bad Request |
The request was malformed, missing required fields, or the target path was invalid (e.g., nested paths for single-resource operations). |
401 Unauthorized |
The FwdSessionId header is missing or the session token is invalid/expired. |
404 Not Found |
The specified user was not found (only for GET /admin/security/users/<name>). |
For mutating operations (POST, PUT, DELETE), a successful execution returns:
{
"success": true
}
A failed execution returns:
{
"success": false
}
If errors are collected during the operation, they are included in the response:
{
"success": false,
"errors": [
"Error message 1",
"Error message 2"
]
}
Note:
<name>corresponds to the FWD user account name (subject ID).- All requests require the
FwdSessionIdheader with a valid session token obtained via the login endpoint. - Use
GET /admin/security/usersto retrieve all available users before performing targeted operations. - When providing a
passwordfield inPOSTorPUTrequests, the password is sent as plain text and hashed server-side.
© 2013-2026 Golden Code Development Corporation. ALL RIGHTS RESERVED.