Please enable JavaScript to view this site.

Administrationshandbuch

Damit beim direkten Zugriff auf eine Ergebnisliste über eine zu diesem Zweck generierte URL überprüft werden kann, ob diese gültig ist, muss für die URL bei der Generierung eine Signatur erstellt und diese als zusätzlicher URL-Parameter angehängt werden (siehe Abschnitt Integration einer Ergebnisliste ohne Passphrase bzw. Abschnitt Integration mit Passphrase):

URL ohne Verwendung der Passphrase

http://servername/JobRouter/modules/jobarchive/index.php?
action=showresultlist&id=<resultListId>&q=<queryParameters>&signature=<signature>

Zu signierender Teil der URL:

<urlPartToSign> = /JobRouter/modules/jobarchive/index.php?
action=showresultlist&id=<resultListId>&q=<queryParameters>

Bitte beachten Sie: Das Protokoll (z.B. https) und der Servername müssen beim Signieren weggelassen werden.

URL mit Verwendung der Passphrase

http://servername/JobRouter/modules/jobarchive/index.php?
action=showresultlist&id=<resultListId>&eq=<encryptedQueryParameters>&signature=<signature>

Zu signierender Teil der URL:

<urlPartToSign> =/JobRouter/modules/jobarchive/index.php?
action=showresultlist&id=<resultListId>&eq=<encryptedQueryParameters>

Bitte beachten Sie: Das Protokoll (z.B. https) und der Servername müssen beim Signieren weggelassen werden.

Die Signatur für die URL wird folgendermaßen erzeugt:

<signature> = HASH_HMAC(SHA256_ALGORITHM, <urlPartToSign>, SHA512(<signatureKey>))

Zunächst wird der SHA-512-Hash des Signaturschlüssels im Hexadezimalformat gebildet (Zeichenkette bestehend aus 128 Zeichen)

Anschließend wird der Keyed-Hash Message Authentication Code (HMAC) des zu signierenden Teils der URL unter Anwendung des SHA-256-Algorithmus mit dem SHA-512-Hash des Signaturschlüssels als Schlüssel gebildet

Als Wert für den Signaturschlüssel <signatureKey> ist die Zeichenkette zu verwenden, welche in der Konfiguration der Ergebnisliste im JobRouter angezeigt wird.

Codeausschnitt für PHP

$signatureKeyHash = hash('sha512', $signatureKey);
$signature = hash_hmac('sha256', $urlPartToSign, $signatureKeyHash);

Codeausschnitt für Java

Mac hmac = Mac.getInstance("HmacSHA256");
hmac.init(getSignKey(signatureKey));
byte[] hmacBytes = hmac.doFinal(urlPartToSign.getBytes("UTF-8"));
StringBuffer hexSignature = new StringBuffer();
for (int i = 0; i < hmacBytes.length; i++) {
    hexSignature.append(Integer.toString((hmacBytes[i] & 0xff) + 0x100, 16).substring(1));
}
String signature = hexSignature.toString();

Codeausschnitt für .NET

byte[] bytesToSign = UTF8Encoding.UTF8.GetBytes(urlPartToSign);
byte[] key = GetSignKey(signatureKey);
HMACSHA256 hmac = new HMACSHA256(key);
byte[] hmacBytes = hmac.ComputeHash(bytesToSign);
StringBuilder hexSignature = new StringBuilder(hmacBytes.Length * 2);
foreach (byte b in hmacBytes) {
    hexSignature.AppendFormat("{0:x2}", b);
}
string signature = hexSignature.ToString();

Dabei sollte die Methode GetSignKey wie folgt implementiert werden:

using System.Security.Cryptography;

using System.Text;

.......

        public static byte[] GetSignKey(string signatureKey)

        {

            using (var sha = new SHA512Managed())

            {

                var signatureKeyBytes = Encoding.UTF8.GetBytes(signatureKey);

                byte[] hashBytes = sha.ComputeHash(signatureKeyBytes);

 

                var stringBuilder = new StringBuilder(hashBytes.Length * 2);

                foreach (byte b in hashBytes)

                {

                    stringBuilder.AppendFormat("{0:x2}", b);

                }

 

                return Encoding.UTF8.GetBytes(stringBuilder.ToString());

            }

        }

Auch zu berücksichtigen ist, dass PHP bei UrlEncode die Spezialzeichen wie "=" in Uppercase darstellt, während .Net im Lowercase. Deswegen muss das Verhalten auch entsprechend wie folgt angepasst werden:

public static String UrlEncodeToUpperCase(string text)

{

   return System.Web.HttpUtility.UrlEncode(text).Replace("%3d", "%3D").Replace("%2b", "%2B").Replace("%2f", "%2F");

}