Verificación de hash
Una vez que un propietario de recursos autoriza a un software cliente, el servidor de autorización redirige al proveedor de identidad (IdP) del propietario de recursos hacia el URI de finalización, siempre que el cliente haya proporcionado un objeto interact.finish
en la solicitud inicial. Para proteger esta comunicación y verificar que la redirección efectivamente proviene del servidor de autorización, este incluirá un parámetro de hash en la solicitud dirigida al URI de devolución de llamada del cliente. El cliente debe verificar ese hash.
Método de hash
Sección titulada «Método de hash»La base del hash se genera concatenando en secuencia los valores siguientes, separados por un único carácter de salto de línea (/n)
:
- Valor
nonce
enviado por el cliente en la solicitud inicial. - Valor
nonce
devuelto por el servidor de autorización después de la solicitud de concesión inicial. interact_ref
devuelto por el servidor de autorización en el método de finalización de la interacción.- El punto final de concesión
uri
que el cliente utilizó para realizar su solicitud inicial.
El ejemplo a continuación muestra los cuatro componentes mencionados que conforman la base del hash. No se admite relleno ni espacios en blanco antes o después de cada línea, ni un salto de línea adicional al final.
VJLO6A4CATR0KROMBDOFXG4Y5CVJCX821LH4IFWWIKYB2PQ6U56NL1https://server.example.com/tx
La codificación ASCII de esta cadena se somete a la función de hash con el algoritmo sha-256
, que es el único admitido actualmente por Open Payments. La matriz de bytes que resulta de la función de hash se codifica luego en Base64 sin relleno. La cadena resultante es el valor de hash.
Con el ejemplo de la cadena base de hash mencionado, a continuación se muestra el hash codificado sha-256
que usa el algoritmo SHA2 de 256 bits.
x-gguKWTj8rQf7d7i3w3UhzvuJ5bpOlKyAlVpLxBffY
Verificación de hash
Sección titulada «Verificación de hash»Cuando el cliente recibe una redirección del servidor de autorización, este incluye el parámetro de hash en la respuesta. El cliente debe calcular exactamente ese valor concatenando los campos a los que se hace referencia anteriormente y aplicando posteriormente el algoritmo de hash sha-256
. Si el valor de hash coincide con el parámetro enviado por el servidor de autorización, el cliente puede estar seguro de que la redirección proviene del servidor de autorización.
El ejemplo a continuación muestra cómo verificar en JavaScript el hash recibido del servidor de autorización.
function verifyHash( clientNonce, interactNonce, interactRef, authServerUrl, receivedHash) { const data = `${clientNonce}\n${interactNonce}\n${interactRef}\n${authServerUrl}/` const hash = createHash('sha-256').update(data).digest('base64')
return hash === receivedHash}
Lecturas adicionales
Sección titulada «Lecturas adicionales»Para obtener más información, consulte la sección Cálculo del hash de interacción de la especificación de GNAP.