fleet/ee/tools/license
Zach Wasserman 9876dbe6b6
Implement license loading and validation (#908)
- Load license from ES256 signed JWT key.
- Parse license claims into LicenseInfo struct.
- Update contribution documentation with sample license key.

Closes #816.
2021-05-31 11:35:15 -07:00
..
license.js Implement license key generation (#906) 2021-05-30 19:36:12 -07:00
package.json Implement license key generation (#906) 2021-05-30 19:36:12 -07:00
README.md Implement license loading and validation (#908) 2021-05-31 11:35:15 -07:00
yarn.lock Implement license key generation (#906) 2021-05-30 19:36:12 -07:00

Fleet license key generation

This directory contains the Node script for generating Fleet license keys.

Usage

Setup

Install the JS dependencies:

yarn

Put the private key and passphrase into files (avoid using shell commands to prevent secrets from leaking into shell history). Speak to @zwass or @mikermcneil if you need to get access to these secrets.

nano key.pem
nano passphrase.txt

Generate a key

Run ./license.js generate to generate a key. For example:

./license.js generate --private-key key.pem --key-passphrase passphrase.txt --expiration 2022-01-01 --customer test --devices 100 --note 'for development only'
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJGbGVldCBEZXZpY2UgTWFuYWdlbWVudCBJbmMuIiwiZXhwIjoxNjQwOTk1MjAwLCJzdWIiOiJkZXZlbG9wbWVudCIsImRldmljZXMiOjEwMCwibm90ZSI6ImZvciBkZXZlbG9wbWVudCBvbmx5IiwidGllciI6ImJhc2ljIiwiaWF0IjoxNjIyNDI2NTg2fQ.WmZ0kG4seW3IrNvULCHUPBSfFdqj38A_eiXdV_DFunMHechjHbkwtfkf1J6JQJoDyqn8raXpgbdhafDwv3rmDw

See ./license.js generate --help for more details on arguments.

Key format

License keys are JWTs signed with the ES256 method.

Check the contents of a key with https://jwt.io/.

The key generated above contains the following payload:

{
  "iss": "Fleet Device Management Inc.",
  "exp": 1640995200,
  "sub": "development",
  "devices": 100,
  "note": "for development only",
  "tier": "basic",
  "iat": 1622426586
}
  • devices refers to the number of licensed devices.
  • note includes any additional note about the terms of the license.
  • tier is the license Tier: currently basic = paid, core = free (though we do not plan to issue license keys for core)
  • Other claims use the meanings described in the JWT specification.