Asegurar el MAC para el proceso de calificaciones
El mecanismo de seguridad MAC es una de las opciones cuando ha activado la API REST segura al configurar el flujo de trabajo de aprobación o un libro de calificaciones.
Generar y validar el valor MAC
Verifique que el valor de la clave API sea el valor que espera, y luego verifique el valor del parámetro MAC:
Ordena la clave API y otros parámetros alfabéticamente por nombre de parámetro.
Concatena los valores de los parámetros en ese orden en una sola cadena.
Añade el valor de Secreto Compartido de la pantalla de configuración Grades Journey a la cadena obtenida en el paso anterior.
Cifra la cadena en una cadena de 16 bytes usando el algoritmo MD5 (véanse los siguientes ejemplos).
Convierte la cadena de 16 bytes en una cadena alfanumérica (hexadecimal) de 32 bytes para soporte de URL.
Compare su MAC generado con el MAC generado por Blackboard que se pasó en la solicitud.
Ejemplo de Java
/**
* Calculates a secure MAC (message authentication code) from an array of strings and
shared secret.
* @param values – Parameters must first be sorted alphabetically by parameter name, then
the values of these sorted parameters passed to calculateSecureMac
* @param secret - the shared secret
* @return The calculated MAC
*/
private String calculateSecureMAC (final String[] values, final String secret) throws
NoSuchAlgorithmException
{
// concatenate param values
final int size = values.length;
String paramString = "";
for(int i=0; i<size; i++)
{
paramString += values[i];
}
// get md5 hash from ascii value and secret
final MessageDigest md = MessageDigest.getInstance("MD5");
final byte[] hashBytes = md.digest((paramString + secret).getBytes());
md.reset();
// convert to hex
String mac = "";
String hexByte;
for (int k=0; k<hashBytes.length; k++)
{
hexByte = Integer.toHexString(hashBytes[k] < 0 ? hashBytes[k] + 256 : hashBytes[k]);
mac += (hexByte.length()==1) ? "0" + hexByte : hexByte;
}
return mac;Ejemplo de PHP
/* Calculates a MAC (message authentication code) from an array of strings and a secret.
Sort request parameters alphabetically by parameter name first, then pass values of sorted
parameters and shared secret to calculateSecureMac */
function calculateSecureMac($params, $secret)
{
// concatenate param values
$data = implode('', $params);
// get md5 of concatenated param values and secret
$mac = md5($data . $secret);
return $mac;
}Ejemplo Perl
use Digest::MD5;
# Calculates a MAC (message authentication code) from an array of strings and a secret. Sort request parameters alphabetically by parameter name first, then pass values of sorted parameters and shared secret to calculateSecureMac
sub calculateSecureMac
{
my @args = @_;
$secret = pop(@args);
# concatenate param values
$data = join("", @args);
# get md5 of concatenated param values and secret
$ctx = Digest::MD5->new;
$ctx->add($data . $secret);
$mac = $ctx->hexdigest;
return $mac;
}