Cifrar credenciales y obtención de token
Importante
Primero es necesario tener configurado un usuario con su respectiva contraseña y asegurarse de que este usuario pueda generar Tokens de seguridad desde el servicio Autorizador. Este usuario y contraseña son proporcionados por BAM.
Los pasos para lograr un proceso de encriptación exitoso son los siguientes:
Paso 1: Obtener una llave pública
Esta llave pública es necesaria para poder cifrar las credenciales proporcionadas por BAM y para obtenerla debes consumir el siguiente endpoint.
Método GET https://cmms.bam.com.gt/security/v1/auth/legacy/publicKey
Responses
200 - Successful
{
"public_key": " Proporciona la llave publica utilizada por BAM",
"symetric_algorithm": "aes256"
}
403 - Forbidden
{
"message": ""
}
Paso 2: Encriptar las credenciales proporcionadas por BAM
Después de obtener la llave pública (ver paso 1), procedemos a decodificarla ya que viene codificada en Base64. Para esto nos podemos apoyar en cualquier herramienta que permita esta decodificación.
Después de haber decodificado la llave pública que viene en Base64, tendremos la llave pública lista para poder usarla para cifrar las credenciales proporcionadas por BAM.
Cifrado de credenciales
Con la llave pública decodificada, procedemos a cifrar las credenciales con cualquier herramienta o librería que permita cifrar mediante PGP.
Ejemplo del resultado de credenciales cifradas con la llave pública:
-----BEGIN PGP MESSAGE----- Version: OpenPGP.js v4.10.10 Comment: https://openpgpjs.org wcACA9zpmLvRYBoMEgQjBAHxbI0WIfJwH+Y1bo1VdRavjEx7B9n2RXFh9D76 UQQM2RUl0Qf4f5Ly/Wk0hh9eewoGegR2A7iEXvX6u9ICGGzBDwDqISFdq4PH wTV1Vr1b3TZtRUTS7HF8RXcQYVeLPLj8CyQoOxbkTADvmhonJ5f5l2FQtLOj b3oGm2gOL/AOaM6doTDm7TPwlPt4rcri8eFXltQi0+PtMuzJRzOWpt6RQ7da +NHOuGA+ufxXWpOiJiQnOPXSbgEbJzPbQgh9jUqW/Z+N0PKD0XcmdQ+6Lozg cDZ2uFyHYKsxit3ic12GAKRnXM67lZs7+4Lv7XO2zxW5GkM2dHaDreQW3VFh glACJ+Rdw6f7zYIEGd0EQuai1XvKg9ikiy7m3se+rNwgCUUOzGx7 =gTZR -----END PGP MESSAGE-----
El resultado de esta operación nos debe devolver las credenciales ya cifradas. Sin embargo, a estas credenciales ya cifradas debemos codificarlas en formato Base64.
Para este proceso podemos usar cualquier herramienta que permita codificar en formato Base64.
Después de haber codificado en Base64, debemos enviar este texto codificado al servicio Autorizador de BAM para obtener el Token que necesitamos.
A continuación un ejemplo de las credenciales codificadas en Base64:
LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tClZlcnNpb246IE9wZW5QR1AuanMgdjQuMTAuMTAKQ29tbWVudDogaHR0cHM6Ly9vcGVucGdwanMub3JnCgp3Y0FDQTl6cG1MdlJZQm9NRWdRakJBR2dWenBNOHpkeUxKa3FXS1FaVjArblpHZDF3YjRnMGdHd2plSjAKTk1hVWtKaFkwYTVTN1lnZXpVKzMrSjFJdG10VzhzcWJwdUM3RnUwN3NOMVZGNDZmMlFGcElESUs3YjJHCkZnSXRvVUQ1QStzLzFKV0Z1UUtNV21jZ3pCZE1BZFhXbm5WMVpKNlNkVFhwU0pueTlya2hHTDlNSE9OZwpqS0Z3WnpaZG1xTmYrZkUvTnpCTElLcWdwY01UV2pXUmZnSEtSNXFqeTJsdWNRQlBDd2VZeVNjY0hkWk0KanR0bjlEZzZ1SWp5SWFSaEpJVzh4djdTYmdGWFJFbmtVUlFHc0p0M0x2WWhROWtCY3liZ01kMHRkZTFOCkIyWlpCK1VoNjdyS0hKTlZ2OXVCQTA2U1d2T1RMRzROUm5QTCtjcUFPN0U2MTFDNGJ0OXljWlBXWmwveQpybHJkQXVxZFpKOVgyV25WTG1qa1lNc2xzcVZPbEdOclJOdHdIdnFXMExVSGJFZ3kvdzg1Cj1rbXFZCi0tLS0tRU5EIFBHUCBNRVNTQUdFLS0tLS0K
Siempre recuerda
Para obtener un token de seguridad debemos usar el siguiente endpoint:
Método POST https://cmms.bam.com.gt/security/v1/auth/authorize
En el body debemos enviar un campo llamado encryptedData. Este campo debe llevar como valor el texto codificado en Base64 (ver paso 2).
Por razones de seguridad debemos cifrar y codificar las credenciales proporcionadas por BAM y en ningún momento las credenciales deben viajar como texto plano.
Parameters
Body Params
{
"grant_type": "password",
"encryptedData": "LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tClZlcnNpb246IE9wZW5QR1AuanMgdjQuMTAuMTAKQ29tbWVudDogaHR0cHM6Ly9vcGVucGdwanMub3JnCgp3Y0FDQTl6cG1MdlJZQm9NRWdRakJBR2dWenBNOHpkeUxKa3FXS1FaVjArblpHZDF3YjRnMGdHd2plSjAKTk1hVWtKaFkwYTVTN1lnZXpVKzMrSjFJdG10VzhzcWJwdUM3RnUwN3NOMVZGNDZmMlFGcElESUs3YjJHCkZnSXRvVUQ1QStzLzFKV0Z1UUtNV21jZ3pCZE1BZFhXbm5WMVpKNlNkVFhwU0pueTlya2hHTDlNSE9OZwpqS0Z3WnpaZG1xTmYrZkUvTnpCTElLcWdwY01UV2pXUmZnSEtSNXFqeTJsdWNRQlBDd2VZeVNjY0hkWk0KanR0bjlEZzZ1SWp5SWFSaEpJVzh4djdTYmdGWFJFbmtVUlFHc0p0M0x2WWhROWtCY3liZ01kMHRkZTFOCkIyWlpCK1VoNjdyS0hKTlZ2OXVCQTA2U1d2T1RMRzROUm5QTCtjcUFPN0U2MTFDNGJ0OXljWlBXWmwveQpybHJkQXVxZFpKOVgyV25WTG1qa1lNc2xzcVZPbEdOclJOdHdIdnFXMExVSGJFZ3kvdzg1Cj1rbXFZCi0tLS0tRU5EIFBHUCBNRVNTQUdFLS0tLS0K",
"client_id": "TPS",
"response_type": "legacy"
}
Response
200 - Successful
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlVjSWxDSVFoM25iS2htdTFBZXExWnUtR0ROZGJLQUJWbnVXWVhZZjAwejgifQ...",
"refresh_token": "xA0FQCrWIa0YQ8jTe9dRdwNHiZX2Xi9IwoPNgKycuhSz7vjslayWN1csQ596RNF5TB501q0mc3BambUZJ...",
"id_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlVjSWxDSVFoM25iS2htdTFBZXExWnUtR0ROZGJLQUJWbnVXWVhZZjAwejgifQ...",
"token_type": "bearer",
"expires_in": 1800
}
El valor de access_token es el que se utilizará para consumir los métodos siguientes.