Ivanti Connect Secure/Ivanti Policy Secure Configurations Using REST APIs

Getting Active Sessions

Request

Fetch default number of active sessions (default=200)

curl -k -u <api-key>: https://<pcs-ip>/api/v1/system/active-users

Example:

curl -k -u K7Z7xA54AKnv1++kcViamCCiUrEBgMSP+sHKar4EcKY=: https://10.209.125.4/api/v1/system/active-users

Fetch specified number of active sessions

curl -k -u <api-key>: https://<pcs-ip>/api/v1/system/active-users?number=<number>

Example:

curl -k -u K7Z7xA54AKnv1++kcViamCCiUrEBgMSP+sHKar4EcKY=: https://10.209.125.4/api/v1/system/active-users?number=250

Response

Content-Type: application/json

{

"active-users": {

  "active-user-records": {

    "active-user-record": [

     {

       "active-user-name": "user1",

       "agent-type": "Windows 8.1 Google Chrome",

       "authentication-realm": "localrealm",

       "endpoint-security-status": "Not Applicable\nPassed Policies: \nFailed Policies: \nEliminated Roles: ",

       "events": 0,

       "login-node": "localhost2",

       "network-connect-ip": null,

       "network-connect-transport-mode": null,

       "session-id": "sidb03b1e971b7ebe163bb70c966a8ae2b50767aae300000000",

       "pulse-client-version": "9.1.4.1316",

       "user-roles": "localrealm",

       "user-sign-in-time": "2018/08/23 11:45:40"

     },

     {

       "active-user-name": "user2",

       "agent-type": "Windows 7 Google Chrome",

       "authentication-realm": "localrealm",

       "endpoint-security-status": "Not Applicable\nPassed Policies: \nFailed Policies: \nEliminated Roles: ",

       "events": 0,

       "login-node": "localhost2",

       "network-connect-ip": null,

       "network-connect-transport-mode": null,

       "session-id": "sid68377b6249d24784edfdd07edfe61ee9934b556100000000",

       "user-roles": "localrealm",

       "user-sign-in-time": "2018/08/23 11:46:15"

     }

    ]

},

  "total-matched-record-number": 2,

"total-returned-record-number": 2,

"user-login-permission": true

}

}

Getting Particular Active Session Details

Request

curl -k -u <api-key>: https://<pcs-ip>/api/v1/system/active-users?name=user2

Example:

curl -k -u K7Z7xA54AKnv1++kcViamCCiUrEBgMSP+sHKar4EcKY=: https://10.209.125.4/api/v1/system/active-users?name=user2

Response

Content-Type: application/json

{

"active-users": {

  "active-user-records": {

     "active-user-record": [

       {

         "active-user-name": "user2",

         "agent-type": "Windows 7 Google Chrome",

         "authentication-realm": "localrealm",

         "endpoint-security-status": "Not Applicable\nPassed Policies: \nFailed Policies: \nEliminated Roles: ",

         "events": 0,

         "login-node": "localhost2",

         "network-connect-ip": null,

         "network-connect-transport-mode": null,

         "session-id": "sid68377b6249d24784edfdd07edfe61ee9934b556100000000",

         "user-roles": "localrealm",

         "user-sign-in-time": "2018/08/23 11:46:15"

      }

    ]

  },

  "total-matched-record-number": 1,

  "total-returned-record-number": 1,

  "user-login-permission": true

}

}

Deleting a Particular Active Session

Request

curl -k -u <api-key>: https://<pcs-ip>/api/v1/system/active-users/session/sid6dc167193b66fef812ef3fdba62729e53f8499f0c25df3be -X DELETE

Example:

curl -k -u K7Z7xA54AKnv1++kcViamCCiUrEBgMSP+sHKar4EcKY=: https://10.209.125.4/api/v1/system/active-users/session/sid6dc167193b66fef812ef3fdba62729e53f8499f0c25df3be -X DELETE

Response

HTTP/1.1 204 NO CONTENT

Content-Length: 0

Content-Type: application/json

Deleting All Active Sessions

Request

curl -k -u <api-key>: https://<pcs-ip>/api/v1/system/active-users?all -X DELETE

Example:

curl -k -u K7Z7xA54AKnv1++kcViamCCiUrEBgMSP+sHKar4EcKY=: https://10.209.125.4/api/v1/system/active-users?all -X DELETE

Response

HTTP/1.1 204 NO CONTENT

Content-Length: 0

Content-Type: application/json

Querying Set of Leased Licenses in the License Server System

Request

GET /api/v1/license/license-server-lease-information HTTP/1.1

Host: 10.209.114.226

Authorization: Basic

c2czWUJmc1lyUjcwN2daSFh6RHdqME1YSnNhdDZmcXlaOVZKNFNSdStaZz06

Content-Type: application/json

Response

HTTP/1.1 200 OK

Content-Length: 2210

Content-Type: application/json

{

"leased-license-counts": {

   "features": {

      "feature": [

        {

           "clients": {

              "client-info": [

                 {                     "leased-count": 0,

                     "name": "client1"

                 }

               ]

            },

            "name": "Advanced Mobile License - Onboarding",

            "total-count": 0

         },

         {

            "clients": {

            "client-info": [

              {

                 "leased-count": 0,

                 "name": "client1"

              }

            ]

         },

          "name": "Cloud Secure feature",

          "total-count": 0

      },

{

          "clients": {

            "client-info": [

              {

                 "leased-count": 0,

                 "name": "client1"

              }

            ]

          },

          "name": "Concurrent Meeting Users",

          "total-count": 0

       },

{

          "clients": {

            "client-info": [

             {

                "leased-count": 200,

                "name": "client1"

             },

{

                "leased-count": 0,

                "name": "client2"

             }

]

],

           "name": "Concurrent Users",

           "total-count": 200

        },

        {

          "clients": {

            "client-info": [

{

"leased-count": 0,

"name": "client1"

}

]

},

          "name": "Named Users",

          "total-count": 0

        },

        {

          "clients": {

            "client-info": [

              {

                "leased-count": 0,

"name": "client1"

              }

            ]

         },

         "name": "Premier Java Remote Desktop Applet",

         "total-count": 0

       }

      ]

     },

     "machine-id": "VASPMVKIT1NJNFPPS",

     "query-summary": {},

     "release-info": {

     "build-number": "10124",

     "version": "9.0"

      },

     "serial-number": null,

"signature":

"HMx/W0VhDAABAAAApoB/uSUYcwJSlk7HeXVMXK6+KsIPTrJnjXrUci
JEef2EKWyqgbDGoXhzYaGDl6Ye29oOw2KRQlyCM/HRpIpujA==",

     "time-stamp": "Fri Aug 24 14:43:00 2018"

}

}

Pulling State from a License Server on a License Client

Request

PUT /api/v1/license/license-client-lease-state HTTP/1.1

Host: 10.209.114.228

Authorization: Basic

OWZBcVNKUkRCcEdjSEVQY3A0aDZ2UnFwdjhXbExIYzUxRS91TVU1VnBnMD06

Content-Type: application/json

{

 

}

While using above URL (i.e., license-client-lease-state) by PUT operation, we provide empty JSON body as input, because PUT operation expects JSON body.

Response

HTTP/1.1 200 OK

Content-Length: 86

Content-Type: application/json

{

   "result": {

"info": [

{

  "message": "Success"

}

]

   }

}

Configuring Certificates based on CSR Workflow

Request

POST /api/v1/system/certificates/device-certificates HTTP/1.1

Host: 10.209.114.228

Authorization: Basic aWZuM2VmZVZTRU9YNVZkVVZ3eFpiYWdob3VCTndxZEkyaExubUcyVU5ibz06

Content-Type: application/json

{

"cert":"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",

"password": <certifcicate_password>,

"internal-interfaces": { "internal-interface" : ["<Internal Port>", "vport1"] },

"external-interfaces": { "external-interface" : ["<External Port>"] },

"management-interface": true

}

Response

HTTP/1.1 201 CREATED

Content-Length: 112

Content-Type: application/json

{

"result": {

"info": [

   {

     "message": "Operation successfully completed."

   }

]

}

}

Creating a CSR for a Device Certificate

Request

POST /api/v1/system/certificates/device-certificate-csrs HTTP/1.1

Host: 10.209.114.228

Authorization: Basic aWZuM2VmZVZTRU9YNVZkVVZ3eFpiYWdob3VCTndxZEkyaExubUcyVU5ibz06

Content-Type: application/json

{

"subject-common-name": "QA.pcs.company.com",

"key-type": "ECDSA",

"ecc-curve": "P-384"

}

Response

HTTP/1.1 201 OK

Content-Length: 266

Content-Type: application/json

{

"result": {

   "info": [

    {

       "message": "Created CSR 'CSR_164' successfully"

    },

    {

       "message": "Use POST /api/v1/system/certificates/device-certificate-csrs/CSR_164/certificate to upload the signed certificate"

    }

]

}

}

Deleting Device Certificate by Its Subject Name

Request

DELETE /api/v1/system/certificates/device-certificates/srikrsa.test.saqacertserv.com HTTP/1.1

Host: 10.209.114.228

Authorization: Basic aWZuM2VmZVZTRU9YNVZkVVZ3eFpiYWdob3VCTndxZEkyaExubUcyVU5ibz06

Content-Type: application/json

Response

HTTP/1.1 204 NO CONTENT

Content-Length: 0

Content-Type: application/json

Getting System Information

Request

GET /api/v1/system/system-information HTTP/1.1

Host: 10.209.114.228

Authorization: Basic aWZuM2VmZVZTRU9YNVZkVVZ3eFpiYWdob3VCTndxZEkyaExubUcyVU5ibz06

Content-Type: application/json

Response

HTTP/1.1 200 OK

Content-Length: 193

Content-Type: application/json

{

"rollback-partition-information": {

"build": "2330",

"os-name": "ive-sa",

"os-version": "9.1R2"

},

"software-inventory": {

"software": {

"build": "4520",

"name": "IVE-OS",

"type": "operating-system",

"version": "9.1R4"

}

},

"system-information": {

"hardware-model": "PSA5000-V",

"host-name": "localhost2",

"os-name": "ive-sa",

"os-version": "9.1R4",

"serial-number": "VASPHJPEG824R1U0S"

}

}

Retrieving Serial Number and Machine ID

Request

GET /api/v1/system/system-information HTTP/1.1

Host: 10.96.116.30

Authorization: Basic czM3MzVDTFVYbnFObFR5NHdNSTFES3piSDhrMTVwR0pLV2gwOTlMYmxhYz06

Content-Type: application/json

Response

HTTP/1.1 200 OK

Content-Length: 193

Content-Type: application/json

{

  "rollback-partition-information": {

    "build": "5801",

    "os-name": "ive-sa",

    "os-version": "9.1R6"

  },

  "software-inventory": {

    "software": {

      "build": "6087",

      "name": "IVE-OS",

      "type": "operating-system",

      "version": "9.1R7"

    }

  },

  "system-information": {

    "cluster-node": {},

    "hardware-model": "PSA-3000",

    "host-name": "node1",

    "machine-id": "0312MB24A0EZ504VS",

    "os-name": "ive-sa",

    "os-version": "9.1R7",

    "serial-number": "0312022017100103"

  }

}

Realm-based Administrator User Using Administrator Local Authentication Server

Request

POST /api/v1/realm_auth HTTP/1.1

Host: 10.209.114.228

Authorization: Basic YWRtaW4xOmRhbmExMjM=

Content-Type: application/json

{

"realm": "<realm-name>"

}

Response

HTTP/1.1 200 OK

Content-Type: application/json

{

"api_key": "MjUwOGQyNzAyOWU3MWQ2MzNiMTM2Njg2MzAwNDg3MjU="

}

Realm-based Administrator User Using AD Authentication Server

Request

POST /api/v1/realm_auth HTTP/1.1

Host: 10.209.114.228

Authorization: Basic bmF6ZWVyOlBzZWN1cmUxMjMk

Content-Type: application/json

{

"realm": "AdminADRealm"

}

Response

HTTP/1.1 200 OK

Content-Type: application/json

{

"api_key": "ODRjOTcxOTY5ZTlmYTcwY2QwYzk1ZDBjMWQ5N2RmN2Q="

}

Realm-based Administrator User Using LDAP Authentication Server

Request

POST /api/v1/realm_auth HTTP/1.1

Host: 10.209.114.228

Authorization: Basic bmF6ZWVyOlBzZWN1cmUxMjMk

Content-Type: application/json

{

"realm": "LDAPRealm"

}

Response

HTTP/1.1 200 OK

Content-Type: application/json

{

"api_key": "ZTQxNTIxOTJhNmUwMjg3MWI5MjZkYmE1MGM0MzdiMDI="

}

Realm-based Administrator User Using Radius Authentication Server

Request

POST /api/v1/realm_auth HTTP/1.1

Host: 10.209.114.225

Authorization: Basic amFjazpqdW5pcGVy

Content-Type: application/json

{

"realm": "RadiusAdminRealm"

}

Response

HTTP/1.1 200 OK

Content-Type: application/json

{

"api_key": "MGMzZjJkZDZlYmRlYzg0MDE5NzkwYzE1ZGM5MmQyYTQ="

}

Realm-based Administrator User from a Particular Source IP

Request

PUT /api/v1/configuration/administrators/admin-realms/realm/AdminLocalAuthRealm/authentication-policy/source-ip/customized HTTP/1.1

Host: 10.209.114.228

Authorization: Basic T1dFM056VTBPVEl5T0dFeU16WXpOakU0WVRFek9EWXhOamRoTVdVNFpqYz06

Content-Type: application/json

{

      "customized": "selected-ip"

}

Response

HTTP/1.1 200 OK

Content-Length: 124

Content-Type →application/json

{

"result": {

   "info": [

     {

        "message": "Operation succeeded without warning or error!"

     }

]

}

}

Request

POST /api/v1/configuration/administrators/admin-realms/realm/AdminLocalAuthRealm/authentication-policy/source-ip/ips/ip HTTP/1.1

Host: 10.209.114.228

Authorization: Basic T1dFM056VTBPVEl5T0dFeU16WXpOakU0WVRFek9EWXhOamRoTVdVNFpqYz06

Content-Type: application/json

{

   "access": "allow",

   "address": "10.96.158.3",

   "netmask": "255.255.255.255"

}

Response

HTTP/1.1 201 CREATED

Content-Length: 124

Content-Type: application/json

{

"result": {

  "info": [

  {

     "message": "Operation succeeded without warning or error!"

   }

]

}

}

Realm-based Administrator Authorization Role Mapping to .Administrator Role

Request

PUT /api/v1/configuration/administrators/admin-realms/realm/AdminADRealm/role-mapping-rules HTTP/1.1

Host: 10.209.114.228

Authorization: Basic TldVNFl6TmtOVEZqTkRFek1EUXdPVGRoTlRrMk9UWTBaR0l3TkRnM1ptST06

Content-Type: application/json

{

"user-selects-role": "false",

"rule": [

  {

     "roles": [

".Administrators"

],

     "stop-rules-processing": "true",

     "group": {

       "group-names": [

          "PCS-QA/systems"

       ]

},

     "name": "AdminADRoleMapping"

  }

],

"user-selects-roleset": "false"

}

Response

HTTP/1.1 200 OK

Content-Length: 124

Content-Type: application/json

{

"result": {

  "info": [

    {

      "message": "Operation succeeded without warning or error!"

    }

  ]

}

}

Specifying Session Validity for REST Admin Session

Request

PUT /api/v1/configuration/administrators/admin-roles/admin-role/%2EAdministrators/general/session-options HTTP/1.1

Host: 10.209.114.228

Authorization: Basic TldVNFl6TmtOVEZqTkRFek1EUXdPVGRoTlRrMk9UWTBaR0l3TkRnM1ptST06

Content-Type: application/json

{

    "idle-timeout": "5"

}

Response

HTTP/1.1 200 OK

Content-Length: 124

Content-Type: application/json

{

    "result": {

        "info": [

            {

                "message": "Operation succeeded without warning or error!"

            }

        ]

    }

}

Getting Active Directory Search Groups

Request

GET /api/v1/configuration/authentication/auth-servers/auth-server/ADServer/ad/server-catalog/groups HTTP/1.1

Host: 10.209.116.192

Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06

Content-Type: application/json

Response

HTTP/1.1 200 OK

Content-Length: 294

Content-Type: application/json

{

"ad-group": [

{

   "group": "PCS-QA/core",

   "name": "PCS-QA/core",

   "sid": "S-1-5-21-3875260349-1888520165-453808128-1112"

},

{

   "group": "PCS-QA/systems",

   "name": "PCS-QA/systems",

   "sid": "S-1-5-21-3875260349-1888520165-453808128-1108"

}

   

]

}

Adding Search Group to Active Directory

Request

PUT /api/v1/configuration/authentication/auth-servers/auth-server/ADServer/ad/server-catalog/groups HTTP/1.1

Host: 10.209.116.192

Authorization: Basic

RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06

Content-Type: application/json

{

"ad-group": [

{

    "group": "PCS-QA/systems",

    "name": "PCS-QA/systems"

},

{

    "group": "PCS-QA/core",

    "name": "PCS-QA/core"

}

]

}

Response

HTTP/1.1 200 OK

Content-Length: 124

Content-Type: application/json

{

   "result": {

"info": [

{

   "message": "Operation succeeded without warning or error!"

}

]

   }

}

Updating Active Directory Group

To update a group, first get already available list using GET operation and append new group to it before PUT.

Request

PUT /api/v1/configuration/authentication/auth-servers/auth-server/ADServer/ad/server-catalog/groups HTTP/1.1

Host: 10.209.116.192

Authorization: Basic

RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06

Content-Type: application/json

{

"ad-group": [

  {

     "group": "PCS-QA/core",

     "name": "PCS-QA/core",

     "sid": "S-1-5-21-3875260349-1888520165-453808128-1112"

  },

  {

     "group": "PCS-QA/systems",

     "name": "PCS-QA/systems",

     "sid": "S-1-5-21-3875260349-1888520165-453808128-1108"

  },

  {

     "group": "PCS-QA/client",

     "name": "PCS-QA/client",

     "sid": "S-1-5-21-3875260349-1888520165-453808128-1113"

  }

]

}

Response

HTTP/1.1 200 OK

Content-Length: 124

Content-Type: application/json

{

"result": {

"info": [

{

   "message": "Operation succeeded without warning or error!"

}

]

    }

}

Deleting Active Directory Groups

Request

PUT /api/v1/configuration/authentication/auth-servers/auth-server/ADServer/ad/server-catalog/groups HTTP/1.1

Host: 10.209.116.192

Authorization: Basic

RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06

Content-Type: application/json

{

"ad-group": [

]

}

Response

HTTP/1.1 200 OK

Content-Length: 124

Content-Type: application/json

{

"result": {

"info": [

  {

    "message": "Operation succeeded without warning or error!"

  }

]

    }

}

Getting All LDAP Group List

Request

GET /api/v1/configuration/authentication/auth-servers/auth-server/LDAPServer/ldap/server-catalog/groups HTTP/1.1

Host: 10.209.116.192

Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06

Content-Type: application/json

Adding Groups to LDAP

Request

PUT /api/v1/configuration/authentication/auth-servers/auth-server/LDAPServer/ldap/server-catalog/groups HTTP/1.1

Host: 10.209.116.192

Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06

Content-Type: application/json

{

"user-group": [

  {

    "dn": "CN=Administrators,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",

    "group-type": "static",

    "name": "Administrators"

  },

  {

    "dn": "CN=Users,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",

    "group-type": "static",

    "name": "Users"

  }

      ]

}

Response

HTTP/1.1 200 OK

Content-Length: 124

Content-Type: application/json

{

"result": {

"info": [

  {

    "message": "Operation succeeded without warning or error!"

  }

]

    }

}

Updating LDAP Source Group

To update a group, first get already available list using GET operation and append new group to it and then perform PUT operation.

Request

PUT /api/v1/configuration/authentication/auth-servers/auth-server/LDAPServer/ldap/server-catalog/groups HTTP/1.1

Host: 10.209.116.192

Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06

Content-Type: application/json

{

"user-group": [

  {

    "dn": "CN=Administrators,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",

    "group-type": "static",

    "name": "Administrators"

  },

  {

    "dn": "CN=Users,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",

    "group-type": "static",

    "name": "Users"

  },

  {

    "dn": "CN=Guests,CN=Builtin,DC=pcs-qa,DC=blrlab,DC=net",

    "group-type": "static",

    "name": "Guests"

  }

    ]

}

Response

HTTP/1.1 200 OK

Content-Length: 124

Content-Type: application/json

{

"result": {

"info": [

  {

    "message": "Operation succeeded without warning or error!"

  }

]

    }

}

Deleting LDAP Source Group

Request

PUT /api/v1/configuration/authentication/auth-servers/auth-server/LDAPServer/ldap/server-catalog/groups HTTP/1.1

Host: 10.209.116.192

Authorization: Basic RU9jaHYwdmlqVnJibDBqeE9obTlYZDVOdHhVS2FMeSttVzBqL1pKUXh6bz06

Content-Type: application/json

{

"user-group": [

]

}

Response

HTTP/1.1 200 OK

Content-Length: 124

Content-Type: application/json

{

"result": {

"info": [

  {

    "message": "Operation succeeded without warning or error!"

  }

]

    }

}

Creating a Cluster

Request

PUT /api/v1/cluster HTTP/1.1

Host: 10.209.114.228

Authorization: Basic TldVNFl6TmtOVEZqTkRFek1EUXdPVGRoTlRrMk9UWTBaR0l3TkRnM1ptST06

Content-Type: application/json

{

    "cluster-name": "cluster1",

    "cluster-password": "dana123",

    "member-name": "nodeA",

    "action": "create"

}

Response

HTTP/1.1 200 OK

Content-Length: 118

Content-Type: application/json

{

    "result": {

        "info": [

            {

                "message": "Created cluster 'cluster1' successfully"

            }

        ]

    }

}

Adding a Member to Cluster

Request

POST /api/v1/cluster/members HTTP/1.1

Host: 10.209.116.214

Authorization: Basic THI5bmxreU50UE04MWJ6OHRhbjhFMW1PYTVuV3V5MG5XN0oyNmNWcTRhbz06

Content-Type: application/json

{

   "member-name" : "node225",

   "member-ip" : "3.209.114.225",

   "member-netmask" : "255.0.0.0",

   "member-gateway" : "3.0.0.1",

   "member-external-ip" : "2.209.114.225",

   "member-external-netmask" : "255.0.0.0",

   "member-external-gateway" : "2.0.0.1"

}

Response

HTTP/1.1 200 OK

Content-Length: 125

Content-Type: application/json

{

  "result": {

    "info": [

      {

        "message": "Added member 'node225' to cluster successfully"

      }

    ]

  }

}

Getting Cluster Status

Request

GET /api/v1/cluster HTTP/1.1

Host: 10.209.114.228

Authorization: Basic TWN2cUEzbFRYQXcySjBSbGpKWTAzdk1oa2RiTDFLUVJDUjNNdlQ0UlRJdz06

Content-Type: application/json

Response

HTTP/1.1 200 OK

Content-Length: 619

Content-Type: application/json

{

"members": [

    {

        "enabled": true,

        "external-ip": "",

        "external-network": "",

        "internal-ip": "3.209.114.225",

        "internal-netmask": "255.0.0.0",

        "name": "node225",

        "notes": "Enabled, Unreachable",

        "status-code": "0x18"

    },

    {

        "enabled": true,

        "external-ip": "10.209.114.194",

        "external-network": "255.255.240.0",

        "internal-ip": "3.209.114.228",

        "internal-netmask": "255.0.0.0",

        "name": "nodeA",

        "notes": "Leader",

        "status-code": "0x19004"

    }

    ],

    "mode": "Active/Active",

    "name": "cluster1"

}

{

"external-vip-ipv4": "10.204.56.76",

"external-vip-owner": "node-51-39",

"internal-vip-ipv4": "10.204.56.75",

"internal-vip-owner": "node-51-39",

"members": [

  {

    "enabled": true,

    "external-ip": "10.204.56.82",

    "external-netmask": "255.255.240.0",

    "internal-ip": "10.204.51.39",

    "internal-netmask": "255.255.240.0",

    "name": "node-51-39",

    "notes": "Leader",

    "status-code": "0x1b004"

  },

  {

    "enabled": true,

    "external-ip": "10.204.56.87",

    "external-netmask": "255.255.240.0",

    "internal-ip": "10.204.56.88",

    "internal-netmask": "255.255.240.0",

    "name": "Node-something",

    "notes": "Enabled, Unreachable",

    "status-code": "0x18"

  }

],

"mode": "Active/Passive",

"name": "TEST-CLUSTER"

}

Deleting Cluster Member

Request

DELETE /api/v1/cluster/members/node225 HTTP/1.1

Host: 10.209.114.228

Authorization: Basic TWN2cUEzbFRYQXcySjBSbGpKWTAzdk1oa2RiTDFLUVJDUjNNdlQ0UlRJdz06

Content-Type: application/json

Response

HTTP/1.1 200 OK

Content-Length: 129

Content-Type: application/json

{

    "result": {

        "info": [

            {

                "message": "Removed member 'node225' from cluster successfully"

            }

        ]

    }

}

Getting Health Check Status

Request

GET /api/v1/system/healthcheck

Host: 10.209.114.228

Content-Type: application/json

Response

HTTP/1.1 200 OK

Content-Type: application/json

{

   "message": "Security Gateway is accessible."

}

 

Request

GET /api/v1/system/healthcheck?status=all HTTP/1.1

Host: 10.209.114.228

Content-Type: application/json

Response

Content-Type: application/json

{

    "CPU-UTILIZATION4": 8,

    "SSL-CONNECTION-COUNT": 0,

    "MAX-LICENSED-USERS-REACHED": "NO",

    "SWAP-UTILIZATION": 1,

    "DISK-UTILIZATION": -1,

    "USER-COUNT": 0,

    "VPN-TUNNEL-COUNT": 0

}

 

Request

GET /api/v1/system/healthcheck?status=sbr HTTP/1.1

Host: 10.209.114.228

Content-Type: application/json

Response

Content-Type: application/json

{

   "SBR-AVAILABLE": 1

}

Joining a Cluster

Request

PUT /api/v1/cluster HTTP/1.1

Host: 10.209.114.228

Authorization: Basic SkUyV1BaVjRjcGxleElRMnNiZXpYajE2dEVIUm9Oa05WWDdRWHh3MmpJZz06

Content-Type: application/json

{

   "cluster-name": "cluster",

   "cluster-password": "dana123",

   "member-address": "3.209.114.225",

   "action": "join"

}

Response

HTTP/1.1 200 OK

Content-Length: 116

Content-Type: application/json

{

"result": {

  "info": [

  {

         "message": "Joined cluster 'cluster' successfully"

}

]

}

}

VIP Failover

Request

PUT /api/v1/cluster

Host: 10.209.114.228

Authorization: Basic SkUyV1BaVjRjcGxleElRMnNiZXpYajE2dEVIUm9Oa05WWDdRWHh3MmpJZz06

Content-Type: application/json

{

   "action": "vip-failover"

}

Response

In case of active-passive cluster:

{

  "result": {

    "info": [

      {

        "message": "VIP fail-over initiated"

      }

    ]

  }

}

In case of active-active cluster:

{

  "result": {

    "info": [

      {

        "message": "Node not part of an Active-Passive cluster. Invalid operation."

      }

    ]

  }

}

Configuring IF MAP Server

Request

PUT /api/v1/configuration/system/ifmap/overview/ifmap-config/

Host: xx.xxx.xxx.xxx

Authorization: Basic SkUyV1BaVjRjcGxleElRMnNiZXpYajE2dEVIUm9Oa05WWDdRWHh3MmpJZz06

Content-Type: application/json

{

"ifmap-config": " server "

}

Response

HTTP/1.1 200 OK

Content-Length: 116

Content-Type: application/json

{

    "result": {

       "info": [

          {

              "message": ": "Operation succeeded without warning or error!"

          }

       ]

    }

}

Configuring IF MAP Client

Request

PUT /api/v1/configuration/system/ifmap/overview/ifmap-config/

Host: xx.xxx.xxx.xxx

Authorization: Basic SkUyV1BaVjRjcGxleElRMnNiZXpYajE2dEVIUm9Oa05WWDdRWHh3MmpJZz06

Content-Type: application/json

{

"auth-type": "basic",

    "cert": "None",

    "ifmap-config": "client",

    "password-cleartext": "'Ivanti1234$",

    "server-url": "https://<PPS-IP-Address>/dana-ws/soap/dsifmap",

    "username": "admin1"

}

{

    "auth-type": "cert",

    "cert": "xx.xxx.xx.xx",

    "ifmap-config": "client",

    "password-cleartext": "'Ivanti1234$",

    "server-url": "https://<PPS-IP_Address>/dana-ws/soap/dsifmap",

    "username": "admin1"

}

Response

HTTP/1.1 200 OK

Content-Length: 116

Content-Type: application/json

{

    "result": {

       "info": [

          {

              "message": ": "Operation succeeded without warning or error!"

          }

       ]

    }

}

Configuring No IF MAP Server

Request

PUT /api/v1/configuration/system/ifmap/overview/ifmap-config/

Host: xx.xxx.xxx.xxx

Authorization: Basic SkUyV1BaVjRjcGxleElRMnNiZXpYajE2dEVIUm9Oa05WWDdRWHh3MmpJZz06

Content-Type: application/json

{

      "ifmap-config": "no-ifmap"

}

Response

HTTP/1.1 200 OK

Content-Length: 116

Content-Type: application/json

{

    "result": {

       "info": [

          {

              "message": ": "Operation succeeded without warning or error!"

          }

       ]

    }

}

Getting Config Without Ivanti Client Packages (ESAP and Ivanti Secure Access Client Packages)

Request

GET /api/v1/configuration/authentication/endpoint/host-checker/esaps?expand&&excludePulsePackages HTTP/1.1

Host: 10.209.125.139

Authorization: Basic

dS9UOURJRWswZzVyMTdieUJqVnhaQnExZUpTTW9ndCtIdGZzMnczMmlzRT06

Content-Type: application/json

Response

HTTP/1.1 200 OK

Content-Length: 561

Content-Type: application/json

{

"active-version": "3.3.5",

"default-version": "3.3.5",

"esap": [

  {

      "esap-version": "3.3.5",

      "last-activated-time": "Sun 17 Mar 2019 23:54:12 PDT",

      "upload-time": "Sun 17 Mar 2019 23:53:35 PDT"

   },

   {

      "esap-version": "3.3.6",

      "last-activated-time": "Never",

      "upload-time": "Mon 18 Mar 2019 21:45:31 PDT"

   },

   {

      "esap-version": "3.3.7",

      "last-activated-time": "Never",

      "upload-time": "Mon 18 Mar 2019 21:46:12 PDT"

   }

],

"force-same-esap": "false",

"opswat-sdk-version": "4"

}

Backing Up Binary Configuration

Request

GET /api/v1/system/binary-configuration HTTP/1.1

Host: 10.204.51.39

Authorization: Basic dS9UOURJRWswZzVyMTdieUJqVnhaQnExZUpTTW9ndCtIdGZzMnczMmlzRT06

Response

HTTP/1.1 200 OK

Content-Type: text/html; charset=utf-8

Content-Length: 50753630

UEsDBBQAAAAIAE9VmU4J1asqz3cDAKx3AwAKABwAc3lzdGVtLmNmZ1VUCQADvUHB

XL1BwVx1eAsAAQQAAAAABAAAAAAAC4D0fwnTMa1OLV2XgACOdwMAINEfP2AuIVXV

B1FhtptLC259gyNPT7WwhtQKbp2Y2+d1h1MTflQis8wbHytXP19D+SM+amX5UKeO

GDUggxgbrEQMXmwOSv8YBrvXIBShmGO5BVqfUemvdNK3OB+S/g8+LIPG5i2c3LVm

W8hY3PLQ9CJHMrFSBFtgyTX2at85MGCsupxd2gOQQ9e138KrI2hBoywDzCJiRUSU

...

Restoring Binary Configuration (import=normal)

The import normal mode will import the binary configuration excluding the IP, network configurations and cluster configuration. The normal mode is similar to default option in binary import.

Request

PUT /api/v1/system/binary-configuration?import=normal HTTP/1.1

Or

PUT /api/v1/system/binary-configuration HTTP/1.1

Host: 10.204.51.39

Authorization: Basic dS9UOURJRWswZzVyMTdieUJqVnhaQnExZUpTTW9ndCtIdGZzMnczMmlzRT06

Content-Type: text/html; charset=utf-8

Response

HTTP/1.1 200 OK

{

  "result": {

    "info": [

      {

        "message": "Operation successfully completed."

      }

    ]

  }

}

Error Cases:

import mode specified is incorrect (other than normal or full)

Content-Length: 100

Content-Type: application/json

{

"result": {

     "errors": [

       {

          "message": "Invalid import mode"

       }

     ]

  }

}

Content type is not a base 64 encoded binary configuration string

Content-Length: 126

Content-Type: application/json

{

"result": {

    "errors": [

      {

        "message": "Error - Failed to extract configuration files"

      }

     ]

  }

}

Restoring Binary Configuration (import=full)

The import full mode will import everything from the binary configuration provided in the body. This is similar to full binary import.

Request

PUT /api/v1/system/binary-configuration?import=full HTTP/1.1

Host: 10.204.51.39

Authorization: Basic dS9UOURJRWswZzVyMTdieUJqVnhaQnExZUpTTW9ndCtIdGZzMnczMmlzRT06

Content-Type: text/html; charset=utf-8

Body data:

Base64 configuration string as received in GET request)

 

UEsDBBQAAAAIAE9VmU4J1asqz3cDAKx3AwAKABwAc3lzdGVtLmNmZ1VUCQADvUHB

XL1BwVx1eAsAAQQAAAAABAAAAAAAC4D0fwnTMa1OLV2XgACOdwMAINEfP2AuIVXV

B1FhtptLC259gyNPT7WwhtQKbp2Y2+d1h1MTflQis8wbHytXP19D+SM+amX5UKeO

GDUggxgbrEQMXmwOSv8YBrvXIBShmGO5BVqfUemvdNK3OB+S/g8+LIPG5i2c3LVm

……

Response

HTTP/1.1 200 OK

Content-Length: 112

Content-Type: application/json

{

  "result": {

    "info": [

      {

        "message": "Operation successfully completed."

      }

     "errors": [

    ]

  }

}

Error Cases:

import mode specified is incorrect (other than normal or full)

Content-Length: 100

Content-Type: application/json

{

"result": {

       {

          "message": "Invalid import mode"

       }

     ]

  }

}

Content type is not a base 64 encoded binary configuration string

Content-Length: 126

Content-Type: application/json

{

"result": {

    "errors": [

      {

        "message": "Error - Failed to extract configuration files"

      }

     ]

  }

}

Get APIs to Delete Named Users

GET /api/v1/license/named-users

Gives two separate lists of Ivanti Connect Secure and Ivanti Policy Secure named users on license server.

Named users list on license client or independent Ivanti Connect Secure/Ivanti Policy Secure

GET /api/v1/license/named-users/<pcs|pps>

Gives list of Ivanti Connect Secure/Ivanti Policy Secure named users on license server as required.

Example of GET API to fetch users list on independent Ivanti Connect Secure/Ivanti Policy Secure

REQUEST

GET https://10.204.50.4/api/v1/license/named-users HTTP/1.1

Authorization: Basic

Content-Type: application/json

RESPONSE

HTTP/1.1 200 OK

Content-Length: 933

Content-Type: application/json

{

"named-users": [

{

"IP": "x.x.x.x",

"Last Agent Type": "Pulse-Secure/8.3.4.0 (Windows) Pulse/10.0.4.1",

"Last Role": [

"Users"

],

"Last Sign in": "2021-07-16 19:05:51",

"User": "dev1"

},

{

"IP": " x.x.x.x ",

"Last Agent Type": "Pulse-Secure/8.3.4.0 (Windows) Pulse/10.0.4.1",

"Last Role": [

"Users"

],

"Last Sign in": "2021-07-16 19:05:51",

"User": "dev4"

},

{

"IP": " x.x.x.x ",

"Last Agent Type": "Pulse-Secure/8.3.4.0 (Windows) Pulse/10.0.4.1",

"Last Role": [

"Users"

],

"Last Sign in": "2021-07-16 19:05:51",

"User": "dev3"

},

{

"IP": " x.x.x.x",

"Last Agent Type": "Pulse-Secure/8.3.4.0 (Windows) Pulse/10.0.4.1",

"Last Role": [

"Users"

],

"Last Sign in": "2021-07-16 19:05:51",

"User": "dev2"

}

]

}

Example of GET API to fetch users list on license server which gives two separate lists of Ivanti Connect Secure and Ivanti Policy Secure named users.

REQUEST

GET https://10.204.50.4/api/v1/license/named-users HTTP/1.1

Authorization: Basic

Content-Type: application/json

RESPONSE

HTTP/1.1 200 OK

Content-Length: 1604

Content-Type: application/json

{

"pcs": {

"named-users": [

{

"Appliance": "pcs_5",

"Last Login IP": " x.x.x.x",

"Last Login time": "2021-07-16 19:20:13",

"Login Realm": "Users",

"Role": "Users",

"User": "dev1",

"User Agent": "Pulse-Secure/8.3.4.0 (Windows) Pulse/10.0.4.1"

},

{

"Appliance": "pcs_5",

"Last Login IP": " x.x.x.x",

"Last Login time": "2021-07-16 19:20:13",

"Login Realm": "Users",

"Role": "Users",

"User": "dev2",

"User Agent": "Pulse-Secure/8.3.4.0 (Windows) Pulse/10.0.4.1"

},

{

"Appliance": "pcs_5",

"Last Login IP": " x.x.x.x",

"Last Login time": "2021-07-16 19:20:13",

"Login Realm": "Users",

"Role": "Users",

"User": "dev3",

"User Agent": "Pulse-Secure/8.3.4.0 (Windows) Pulse/10.0.4.1"

},

{

"Appliance": "pcs_5",

"Last Login IP": " x.x.x.x",

"Last Login time": "2021-07-16 19:20:13",

"Login Realm": "Users",

"Role": "Users",

"User": "dev4",

"User Agent": "Pulse-Secure/8.3.4.0 (Windows) Pulse/10.0.4.1"

}

]

},

"pps": {

"named-users": [

{

"Appliance": "pps_149",

"Last Login IP": " x.x.x.x",

"Last Login time": "2021-07-17 05:26:48",

"Login Realm": "Users",

"Role": "Users",

"User": "test1",

"User Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"

}

]

}

}

Example of GET API to fetch users list on license server of Ivanti Policy Secure named users alone

REQUEST

GET https://10.204.50.4/api/v1/license/named-users/pps HTTP/1.1

Authorization: Basic

Content-Type: application/json

RESPONSE

HTTP/1.1 200 OK

Content-Length: 676

Content-Type: application/json

{

"named-users": [

{

"Appliance": "pps_149",

"Last Login IP": " x.x.x.x",

"Last Login time": "2021-07-17 05:26:48",

"Login Realm": "Users",

"Role": "Users",

"User": "test1",

"User Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"

},

{

"Appliance": "pps_149",

"Last Login IP": " x.x.x.x",

"Last Login time": "2021-07-17 05:27:20",

"Login Realm": "Users",

"Role": "Users",

"User": "test2",

"User Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"

}

]

}

PUT APIs to Delete single/ Multiple User

PUT /api/v1/license/named-users/<pcs|pps>

Not applicable to license client or independent Ivanti Connect Secure/Ivanti Policy Secure

Delete list of Ivanti Connect Secure/Ivanti Policy Secure named users on license server as required.

Content Type: json

{

"action" : "remove",

"users" : "<list of users>"

}

PUT /api/v1/license/named-users

Not applicable on license server.

Delete Named users list on license client or independent Ivanti Connect Secure/Ivanti Policy Secure

Content Type: json

{

"action" : "remove",

"delete-active-sessions": "true|false"

"users" : "<list of users>"

}

PUT APIs to remove all users

PUT /api/v1/license/named-users/<pcs|pps>

Not applicable to license client or independent Ivanti Connect Secure/Ivanti Policy Secure

Delete list of Ivanti Connect Secure/Ivanti Policy Secure named users on license server as required.

Content Type: json

{

"action": "remove-all"

}

PUT /api/v1/license/named-users

Not applicable on license server.

Delete Named users list on license client or independent Ivanti Connect Secure/Ivanti Policy Secure

Content Type: json

{

"action": "remove-all",

"delete-active-sessions": "true|false"

}

delete-active-sessions is an optional argument in PUT APIs. In case it is not specified, it will be considered as false.
For action remove-all, even if the list of users is given, it is ignored and not processed.

Example of PUT API to delete named users list on independent Ivanti Connect Secure/Ivanti Policy Secure

REQUEST

PUT https://10.204.50.4/api/v1/license/named-users HTTP/1.1

Authorization: Basic

Content-Type: application/json

{

"action" : "remove",

"delete-active-sessions": "true",

"users" : ["dev1", "dev2"]

}

RESPONSE

HTTP/1.1 200 OK

Content-Length: 128

Content-Type: application/json

{

"result": {

"info": [

{

"message": "Deleted user(s) and corresponding active sessions"

}

]

}

}

Example of PUT API to delete named users list of Ivanti Connect Secure client from license Server

REQUEST

PUT https://10.204.50.4/api/v1/license/named-users/pcs HTTP/1.1

Authorization: Basic

Content-Type: application/json

{

"action" : "remove",

"users" : ["dev1", "dev3"]

}

RESPONSE

HTTP/1.1 200 OK

Content-Length: 94

Content-Type: application/json

{

"result": {

"info": [

{

"message": "Deleted user(s)"

}

]

}

}

Example of PUT API to delete all named users list on independent Ivanti Connect Secure/Ivanti Policy Secure

REQUEST

PUT https://10.204.50.4/api/v1/license/named-users HTTP/1.1

Authorization: Basic

Content-Type: application/json

{

"action" : "remove-all",

"delete-active-sessions": "false"

}

RESPONSE

HTTP/1.1 200 OK

Content-Length: 98

Content-Type: application/json

{

"result": {

"info": [

{

"message": "Deleted all user(s)"

}

]

}

}

Example of PUT API to delete all named users list of Ivanti Policy Secure client from license Server

REQUEST

PUT https://10.204.50.4/api/v1/license/named-users/pps HTTP/1.1

Authorization: Basic

Content-Type: application/json

{

"action" : "remove-all"

}

RESPONSE

HTTP/1.1 200 OK

Content-Length: 98

Content-Type: application/json

{

"result": {

"info": [

{

"message": "Deleted all user(s)"

}

]

}

}