Project

General

Profile

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 users array. Each entry includes all user account fields. Fields that are not set for a given user appear as null.


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 Found response is returned with an error message.


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 groups array. Each entry has name and description properties.


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 name field is required. All other fields are optional.


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 name field specifies the new user's name (required).
  • The optional email field sets the email for the cloned user. If omitted, it defaults to null (to avoid uniqueness violations with the source user).
  • The optional oidcUuid field sets the OIDC UUID for the cloned user. If omitted, it defaults to null (to avoid uniqueness violations with the source user).
  • The optional copyAcls boolean field controls whether ACLs are copied from the source user (defaults to false).
  • The optional password field 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}.


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 any name field 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.


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.


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 FwdSessionId header with a valid session token obtained via the login endpoint.
  • Use GET /admin/security/users to retrieve all available users before performing targeted operations.
  • When providing a password field in POST or PUT requests, the password is sent as plain text and hashed server-side.

© 2013-2026 Golden Code Development Corporation. ALL RIGHTS RESERVED.