Loading...
Loading...
Loading...
In this section, you will find additional resources related to authentication.
Loading...
Loading...
Loading...
In this section, you will find all the technical specifications on how to authenticate in order to use the REST APIs of the Unico IDPay product.
To use IDPay, it is necessary to authenticate via access token, using the OAuth2 authentication system.
Unico's OAuth2 authentication system supports server-to-server interaction between a web application and Unico's services.
For this scenario, you will need a service account, which is a non-personal account that belongs to your application and not to an individual user. Your application calls Unico's APIs on behalf of the service account, so users are not directly involved. This scenario is called 'two-legged OAuth' or '2LO'. Typically, an application uses a service account when the application calls Unico's APIs to work with its own data rather than user data.
This is step zero to begin your implementation, so do not skip this stage.
Didn't find something or still need help? If you're already a client or partner, you can reach out through our Help Center.
In this section, you will find an implementation example of the authentication for the Unico IDPay product.
Didn't find something or still need help? If you're already a client or partner, you can reach out through our Help Center.
In this section, you will find the possible errors that may occur when trying to authenticate with the Unico IDPay product.
The errors returned in the request can be identified by the codes below and have the following structure:
1.0.1
Check if the ID provided in the formation of the "iss" is the correct tenant ID, provided during the generation of the private key¹.
1.0.14
Check with the project manager if the application being used is active.
1.1.1
The "scope" parameter was not provided in the payload of the JWT used in the request.
1.2.4
The JWT used in the request has expired. Check the value provided in the "exp" field of the payload.
1.2.5
The JWT used in the request cannot be validated. Check the provided parameters and make sure it has been signed correctly.
1.2.6
The private key used to sign the JWT in the request is no longer acceptable. Please request new credentials for the account used.
1.2.7
O token jwt utilizado na requisição não é mais aceitável, pois já foi utilizado anteriormente. Gere um novo token para fazer uma nova requisição.
1.2.11
The account used is not active.
1.2.14
The account used does not have the necessary permissions.
1.2.18
The account used has been temporarily locked due to exceeding the number of invalid authentication attempts.
1.2.19
The account used is not authorized to impersonate another user account (remove the "sub" parameter from the payload).
1.2.20 1.2.21
Failed to decode the JWT used in the request. Use a new token by including only the fields specified in the "Mandatory Fields" and "Additional Fields" sections, adhering to the correct naming conventions, semantics, and data types for each field.
1.2.22
The JWT used in the request contains additional fields in the payload that are not allowed. Use a new token by including only the fields specified in the "Mandatory Fields" and "Additional Fields" sections, following the correct naming conventions, semantics, and data types for each field.
1.3.1
The account used has source IP restrictions.
1.3.2
The account used has access date/time restrictions.
Didn't find something or still need help? If you're already a client or partner, you can reach out through our Help Center.
In this section, you will find how to perform the authentication process for the Unico IDPay product.
After creating and configuring a service account, your application needs to complete the following steps:
Create a JSON Web Token (JWT), which includes the header, payload, and signature;
Request an access token (AccessToken) from the OAuth2 authentication platform;
Handle the JSON response that the authentication platform will return.
If the response includes an access token, you can use it to make requests to Unico's product APIs for which the service account has access permissions. (If the response does not include an access token, your JWT and token request may be incorrect, or the service account may not have the necessary permissions to access the requested resources.)
The access token generated in the request mentioned above has a default validity of 3600 seconds, but this may vary depending on the security configuration set for your company. When the access token expires, your application should generate a new JWT, sign it, and request a new access token from the authentication platform.
A JWT consists of three parts: a header, a payload, and a signature. The header and payload are JSON objects. These JSON objects are serialized in UTF-8 and then encoded using Base64url encoding¹. This encoding provides resilience against encoding changes in cases of repeated encoding operations. The header, payload, and signature are concatenated with a period (.
) character.
A JWT is composed as follows:
The base text for the signature is composed as follows:
The header consists of two fields that specify the signing algorithm and the token format. Both fields are mandatory, and each field has only one value. Service accounts rely on the RSA SHA-256 algorithm and the JWT token format. As a result, the JSON representation of the header is as follows:
The Base64url representation is as follows:
The JWT payload contains information about the JWT, including the requested permissions (scopes), the account requesting access, the issuer, the time when the token was issued, and the token's lifetime. Most fields are mandatory. Just like the JWT header, the payload is a JSON object and is used in the composition of the signature.
The mandatory fields in the JWT are shown in the table below. They can appear in any order within the payload.
iss
The identifier of the service account within the company.
scope
A space-delimited or plus sign (+) list of the permissions the application is requesting. If all permissions of the account are required, use the asterisk (*) symbol for this.
aud
The address of the authentication platform that issues access tokens. This value should always be exactly https://identityhomolog.acesso.io
Common issues that do not work:
Adding a trailing slash at the end of the address:https://identityhomolog.acesso.io/
Using the HTTP protocol instead of HTTPS:http://identityhomolog.acesso.io
exp
The expiration time of the token, specified in seconds since 00:00:00 UTC, January 1, 1970. This value has a maximum duration of 1 hour after the JWT issuance time. It must be numeric. Common issues that do not work:
Using quotes to delimit the value. For example: “1524161193”
is a string and will not work. Whereas 1524161193
is a number and will work.
iat
The time of JWT issuance, specified in seconds since 00:00:00 UTC, January 1, 1970. This value must be numeric. Common issue that does not work:
Using quotes to delimit the value. For example: “1524161193”
is a string and will not work. However, 1524161193
is a number and will work.
Understand how the conversion works for the issuance (iat) and expiration (exp) fields of the JWT, and also see examples of how to use these field values here. In addition, the 'iat' field must represent the current time in the required format, and the 'exp' field must respect the following calculation:
The representation of the mandatory JSON fields in the JWT payload is as follows:
The JSON Web Signature (JWS) specification is the mechanism that guides the calculation of the signature for a JWT. The input content for the signature calculation is the byte array of the following content:
The same algorithm specified in the JWT header must be used for calculating the signature. The only signature algorithm supported by the OAuth2 authentication platform is RSA using SHA-256. It is expressed as RS256 in the alg field of the JWT header.
Sign the UTF-8 representation of the input content using SHA256withRSA (also known as RSASSA-PKCS1-V1_5-SIGN with the SHA-256 hash) with the private key that was created and associated with the service account (the .key.pem file generated from the request received by email). The output content will be a byte array.
The signature then needs to be encoded in Base64url. The header, payload, and signature should be concatenated with a period character. The result is the JWT. It should be as follows:
Here is an example of a JWT token before Base64url encoding:
Below is an example of the JWT that has been signed and is ready for transmission:
It is also possible to use pre-established libraries to create the JWT. As a reference, you can find a list of libraries on the jwt.io website.
After generating the signed JWT, an application can use it to request an access token. The access token request is a POST HTTPS request, and the body should be URL encoded. The URL is shown below:
The following parameters are mandatory in the POST HTTPS request:
grant_type
Use the following text, URL-encoded if necessary: urn:ietf:params:oauth:grant-type:jwt-bearer
assertion
The JWT, including the signature.
If the JWT and the access token request are properly formed, and the service account has the necessary permissions, the authentication platform will return a JSON object containing an access token. Here’s an example of the response from the platform:
The access token returned in the "access_token" field of the JSON object is also a JWT token that should be used in the APIs of Unico's Products. If an error occurs in the request, you can check the error type in the error table by clicking here.
The duration of the access token is variable. Its duration is specified in the "expires_in" field, which is returned along with the access token. The same access token should be used throughout its validity for all API calls to the products.
Do not request a new access token until the validity of the current token is nearing its end. We recommend a margin of 600 seconds (10 minutes). To do this, perform the following calculation:
Where token.exp is the timestamp of the token's expiration.
By default, the token sent to the company lasts 1 hour, but it can be changed. The recommendation is to always use the expires_in as the base and subtract 600s from it to request a new token.
Examples:
A new access token can be requested when there are 10 minutes left until expiration.
Do not use a fixed time to obtain a new token, as the duration of the received token may be shorter than the established time, which could cause failures when using the services.
¹ According to RFC 4648 for BaseN encoding, the Base64url format is similar to Base64, except that the '=' character is omitted, and the characters '+' and '/' are replaced by '-' and '_', respectively.
² JSON Web Signature: https://tools.ietf.org/html/rfc7515.
Didn't find something or still need help? If you're already a client or partner, you can reach out through our Help Center.
In this section, you will find the Postman collection for the REST API to authenticate with the Unico IDPay product.
Download the file below, import it into Postman, and replace the values of the parameters "service_account", "tenant_id", and "secret_key" to test the call.
In this section, you will find how to create a service account to authenticate in the Unico IDPay product.
To use server-to-server interactions, you need to request the creation of a service account by contacting the project manager responsible for your company and sending the following information: company name, application name, name, email, and phone number of the person responsible for the application within the company. Separate accounts must be created for the Testing and Production environments.
Once these details are received, a service account will be created to authenticate your application, and we will send an email for you to generate the key pair for the account.
A service account credential includes a unique account name, a company identifier (Tenant ID), and at least one key pair (public and private). After generating the keys, you will only receive the private key (file .key.pem), as well as the payload that should be used to create the JWT. This payload will have the following format:
If you need the public key to configure it in your system, please contact the project manager responsible for your account. It is also possible to generate a public key using the following openssl command:
Didn't find something or still need help? If you're already a client or partner, you can reach out through our Help Center.