Skip to main content

Un MAC sécurisé pour Grades Journey

Le mécanisme de sécurité MAC est l'une des options disponibles lorsque vous avez activé l'interface de programmation d'application Secure REST lors de la configuration du workflow d'approbation ou d'un extrait de carnet de notes.

Générez et validez la valeur MAC

Vérifiez que la valeur de la clé interface de programmation d'application est celle que vous attendez, puis validez la valeur du paramètre MAC :

  1. Classez la clé interface de programmation d'application et les autres paramètres dans l'ordre alphabétique par nom de paramètre.

  2. Concaténez les valeurs des paramètres dans cet ordre dans une seule chaîne.

  3. Ajoutez la valeur Shared Secret depuis l'écran de configuration de Grades Journey à la chaîne obtenue à l'étape précédente.

  4. Chiffrez la chaîne en une chaîne de 16 octets à l'aide de l'algorithme MD5 (voir les exemples suivants).

  5. Convertissez la chaîne de 16 octets en une chaîne alphanumérique (hexadécimale) de 32 octets pour la prise en charge des URL.

  6. Comparez votre MAC généré avec le MAC généré par Mon Blackboard qui a été transmis dans la demande.

Exemple 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;

Exemple 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;
}

Exemple 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;
}