El módulo de autenticación es el encargado de realizar el control de credenciales y permitir acceder al recurso o denegarlo. En caso de error devolverá el Status Code '401 Unauthorized'.
Existen2 tipos de autenticación:
Autenticación básica
Autenticación por recurso-verbo
AUTENTICACIÓN BÁSICA
Mediante las credenciales appId y appKey, procederemos a la creación del token de autenticación. Este token nos servirá para todos los recursos de la API.
La creación del token se realizará aplicando una conversión a base64 sobre el resultado binario de la una función hash (sha-256) sobre la concatenación de los valores de las credenciales appId y appKey.
token = base64(bin(hash(appId+appKey,'sha-256')))
Ejemplo:
Con la appId hCN3fdW y la appKey TcA1tG1V7q la generación del token sería:
token = base64(bin(hash(hCN3fdWTcA1tG1V7q,'sha-256')))
AUTENTICACIÓN POR RECURSO
Este tipo de autenticación permite que cada recurso-verbo necesite de la generación de un token distinto, no sirve el mismo token para dos recursos diferentes.
En este caso, la creación del token se realizará de la siguiente forma:
token = base64(bin(hash(appId+appKey+uri+verb,'sha-256')))
Ejemplo:
Para el recurso /v1/banners/{id}/activityLimits de tipo GET con la appId hCN3fdW y la appKey TcA1tG1V7q la generación del token sería:
token = base64(bin(hash(hCN3fdWTcA1tG1V7q/v1/banners/{id}/activityLimitsget,'sha-256')))
Importante: uri y verbo siempre en minúscula
USO
Para la realización de peticiones a la API Sync será necesario pasar como cabeceras ('headers') las siguientes claves y sus respectivos valores:
appId: hCN3fdW
Authorization: Basic NdRA6F49RAHfa20kg5uZOcFQm1H+TxKfAqU5jOZri+8= (Token obtenido con una de las fórmulas anteriores)
CODIGO DE EJEMPLO
JAVA
Alternativa 1
byte[] sha256 = org.apache.commons.codec.digest.DigestUtils.sha256("appId+appKey"); String token = org.apache.commons.codec.binary.Base64.encodeBase64String(sha256); |
Alternativa 2
String sha256Hex = org.apache.commons.codec.digest.DigestUtils.sha256Hex("18JfJ42sJ8m8Me2mpghx2scTYBUVvS"); byte[] sha256bytes = Hex.decodeHex(sha256Hex); String token = org.apache.commons.codec.binary.Base64.encodeBase64String(sha256bytes); |
PHP
token = base64_encode(hex2bin(hash("sha256",$appId.$appKey))); |
MySQL
SET @appId='hCN3fdW'; SET @appKey='TcA1tG1V7q'; SELECT TO_BASE64(UNHEX(SHA2(CONCAT(@appId, @appKey), 256))) AS token; |