Two-factor authentication API
The Two-factor authentication API enables users to add an extra layer of security to their accounts by requiring a TOTP (time-based one-time password) in addition to their primary credentials.
Once two-factor authentication is enabled, requests to obtain an OAuth token, change a password, or
disable two-factor authentication must include an additional header: Cf-2fa-Token: <code>
.
Basic authentication also requires this header each time it is used.
Currently, only TOTP (Time-based One-Time Password) two-factor authentication is supported, providing users with a time-sensitive code for enhanced security.
Start two-factor authentication configuration
First, you need to request two-factor authentication secrets to complete the configuration. The secret token should be added to a third-party authentication app such as Google Authenticator or Authy. A 6-digit code should then be obtained from the application to complete the action.
URI: https://hub.cfengine.com/api/2fa/totp/configure
Method: GET
Example request (curl):
curl --user <username>:<password> \
-X GET \
https://hub.cfengine.com/api/2fa/totp/configure
Successful response example:
HTTP 200 Ok
{
"secret": "SYSZJJVQUIOG5ITA6HPH5PZWLZ3VUP52",
"2faUrl": "otpauth://totp/Mission%20Portal:admin?secret=SYSZJJVQUIOG5ITA6HPH5PZWLZ3VUP52&issuer=Mission%20Portal&algorithm=SHA1&digits=6&period=30",
"algorithm": "sha1",
"digits": 6,
"period": 30,
"issuer": "Mission Portal",
"holder": "admin"
}
Output:
- secret The secret key used to generate the one-time password (OTP)
- 2faUrl The URL that can be converted into QR code and scanned with an authenticator app to set up two-factor authentication
- algorithm The cryptographic algorithm used to generate the OTP
- digits The number of digits in the generated OTP code
- period The time period in seconds for which the OTP code is valid
- issuer The name of the service that is providing the two-factor authentication
- holder The username for whom the two-factor authentication is being configured
Responses:
HTTP response code | Description |
---|---|
200 OK | 2FA configuration successfully created |
500 Internal server error | Internal server error |
Complete two-factor authentication configuration
URI: https://hub.cfengine.com/api/2fa/totp/configure
Method: POST
Parameters:
- code (string) 6-digit code from the authentication application
Example request (curl):
curl --user <username>:<password> \
-X POST \
https://hub.cfengine.com/api/2fa/totp/configure \
--data-raw '{"code": "000000"}'
Successful response example:
HTTP 200 Ok
2FA successfully enabled for this user.
Responses:
HTTP response code | Description |
---|---|
200 OK | 2FA successfully configured |
400 Bad request | 2FA verification failed. |
500 Internal server error | Internal server error |
Disable two-factor authentication for the current user
URI: https://hub.cfengine.com/api/2fa/totp/disable
Method: POST
Headers:
- Cf-2FA-Token (string) 6-digit code from the authentication application
Example request (curl):
curl --user <username>:<password> \
-X POST \
https://hub.cfengine.com/api/2fa/totp/disable \
--header 'Cf-2FA-Token: 537987'
Successful response example:
HTTP 200 Ok
2FA successfully disabled for this user.
Responses:
HTTP response code | Description |
---|---|
200 OK | 2FA successfully disabled |
401 Unauthorized | Invalid two-factor authentication code |
409 Conflict | 2FA is not enabled for this user |
500 Internal server error | Internal server error |
Disable two-factor authentication for other users
In case if a regular user loses access to the authentication application, specific users (admin role by default)
with the Disable 2FA for any user
RBAC role (alias 2fa.any-user.disable
) will be able to
disable two-factor authentication for that user.
URI: https://hub.cfengine.com/api/2fa/totp/disable/user/:username
Method: POST
Example request (curl):
curl --user <username>:<password> \
-X POST \
https://hub.cfengine.com/api/2fa/totp/disable/user/giorgio
Successful response example:
HTTP 200 Ok
2FA successfully disabled for `giorgio` user.
Responses:
HTTP response code | Description |
---|---|
200 OK | 2FA successfully disabled |
401 Unauthorized | Invalid two-factor authentication code |
409 Conflict | 2FA is not enabled for this user |
500 Internal server error | Internal server error |
Verify two-factor authentication code
This API endpoint verifies the authentication code. If OAuth authentication is used and the code is valid, your authorization token will be flagged as verified for 5 minutes. During this 5-minute period after successful verification, you will not need to provide the authorization code from the authentication application.
URI: https://hub.cfengine.com/api/2fa/totp/verify
Method: POST
Parameters:
- code (string) 6-digit code from the authentication application
Example request (curl):
curl --user <username>:<password> \
-X POST \
https://hub.cfengine.com/api/2fa/totp/veify \
--data-raw '{"code": "000000"}'
Successful response example:
HTTP 200 Ok
2FA successfully verified.
Responses:
HTTP response code | Description |
---|---|
200 OK | 2FA successfully verified |
409 Conflict | 2FA is not enabled for this user |
500 Internal server error | Internal server error |
Check if verification is needed
This API endpoint checks if 2FA verification is needed. Only needed for OAuth authentication method as for the Basic authentication is needed every time.
URI: https://hub.cfengine.com/api/2fa/verification-needed
Method: GET
Example request (curl):
curl -X GET \
https://hub.cfengine.com/api/2fa/verification-needed \
--header 'Authorization: Bearer 627135e5a0b142cfdc738c38ad0c0067bc0960e5'
Successful response example:
HTTP 200 Ok
{
"result": true
}
Responses:
HTTP response code | Description |
---|---|
200 OK | 2FA successfully checked |
409 Conflict | 2FA is not enabled for this user |
500 Internal server error | Internal server error |