An apparatus (160; 260), comprising: a network interface connected to at least one client device (120, 130, 140; 220-240) through a computer network (150; 250); a processor configured to check a device fingerprint that uniquely identifies a client device seeking authorization to operate software; and a memory comprising program instructions executable by the processor to: compare the device fingerprint to previously stored device fingerprints to determine if the device fingerprint matches a previously stored device fingerprint; determine whether a total number of instances of the device fingerprint and the previously stored device fingerprints exceeds a pre-determined threshold established by a license identifier; authorize a client request for access to software associated with the license identifier if the total number of instances are within the threshold; and store the device fingerprint characterized in that: said processor is configured to retrieve said device fingerprint through an Internet connection between the network interface and the client device (120, 130, 140; 220-240), the device fingerprint generated by examining the client device to retrieve information exposed to the apparatus through a web browser of the client device; and said comparison step comprises probabilistically comparing said device fingerprint to said previously stored device fingerprints. a network interface connected to at least one client device (120, 130, 140; 220-240) through a computer network (150; 250); a processor configured to check a device fingerprint that uniquely identifies a client device seeking authorization to operate software; and a memory comprising program instructions executable by the processor to: compare the device fingerprint to previously stored device fingerprints to determine if the device fingerprint matches a previously stored device fingerprint; determine whether a total number of instances of the device fingerprint and the previously stored device fingerprints exceeds a pre-determined threshold established by a license identifier; authorize a client request for access to software associated with the license identifier if the total number of instances are within the threshold; and store the device fingerprint compare the device fingerprint to previously stored device fingerprints to determine if the device fingerprint matches a previously stored device fingerprint; determine whether a total number of instances of the device fingerprint and the previously stored device fingerprints exceeds a pre-determined threshold established by a license identifier; authorize a client request for access to software associated with the license identifier if the total number of instances are within the threshold; and store the device fingerprint characterized in that: said processor is configured to retrieve said device fingerprint through an Internet connection between the network interface and the client device (120, 130, 140; 220-240), the device fingerprint generated by examining the client device to retrieve information exposed to the apparatus through a web browser of the client device; and said comparison step comprises probabilistically comparing said device fingerprint to said previously stored device fingerprints. said processor is configured to retrieve said device fingerprint through an Internet connection between the network interface and the client device (120, 130, 140; 220-240), the device fingerprint generated by examining the client device to retrieve information exposed to the apparatus through a web browser of the client device; and said comparison step comprises probabilistically comparing said device fingerprint to said previously stored device fingerprints.