Ansichten:

Verhalten:
Wenn Sie eine URL z.B. mit PHP erstellen, erhalten Sie die Fehlermeldung, wenn Sie versuchen, darauf zuzugreifen:


500 - Interner Serverfehler
DocuWare.Gapi.Utils.Web.DWIntegrations.EX_INVALID_PASS_PHRASE


Lösung:
Dieses Problem tritt auf, weil die URL nicht korrekt verschlüsselt wurde. Bei der Verschlüsselung muss Folgendes beachtet werden:

Die Passphrase verwendet einen symmetrischen Verschlüsselungsalgorithmus. Advanced Encryption Standard (AES) gemäß der Spezifikation FIPS-197.
Es werden folgende Parameter verwendet:

  • Blockgröße = 128 Bits
  • Chiffriergröße = CBC (Cipher Block Chaining)
  • Initialisierungsvektor (IV) = 128 Bits
  • Schlüssellänge = 256 Bits
  • Kein Salz
  • PKCS7-Padding

Base64-Kodierung ist zweimal erforderlich. Die Parameter &lc und &q müssen Base64-kodiert sein. Danach werden alle Parameter verschlüsselt, und das Ergebnis muss erneut Base64-kodiert sein.

Nachfolgend ein JavaScript-Beispiel, das mit der Sprache PHP verwendet werden kann:


var dwuser = "<USERNAME>";
var dwpass = "<PASSWORD>";
var docid = "6";
var cabinetid = "File Cabinet GUID";

var key = encodeURI("PASSPHRASE");
var passphrase = sha512(key);
var passphraseArray = parseHexString(passphrase);
var encryption_key = createHexString(passphraseArray.splice(0, 8));
var iv = createHexString(passphraseArray.splice(0, 4));

console.log("Passphrase: " + passphrase);
console.log("passphrase array:\n" + passphraseArray);
console.log("encryption_key: " + encryption_key);
console.log("IV: " + iv);

var loginstring = convertToUrlTokenFormat(window.btoa("User="+dwuser+"\\nPwd="+dwpass));
var searchstring = convertToUrlTokenFormat(window.btoa('[Indexfeld]='+docid));

var url = "https://server.docuware.cloud/DocuWare/Platform/WebClient/1/Integration";
var encrypturl = "&p=V&lc="+loginstring+"&fc="+cabinetid
encrypturl += "&q="+searchstring+"&dt=Download";
console.log("vor Verschlüsselung\n" + encrypturl);
var ep = encrypt(encrypturl, encryption_key, iv);
console.log("Verschlüsselt\n" + ep);
ep = convertToUrlTokenFormat(ep);
console.log("Verschlüsselt in Base64 URL-Token-Format\n" + ep);
url += "?&ep=" + ep;

console.log("URL: " + url);

function sha512(str) {
return (CryptoJS.SHA512(str)).toString(CryptoJS.enc.Hex);
}

function convertToUrlTokenFormat(str) {
// Gleiche Anzahl für Padding
var padding = (str.split("=").length - 1);
// Gleichheitszeichen entfernen
var returnVal = str.replace(/=/g,"");
// Padding anhängen
returnVal = returnVal + padding;
// + in - und / in _ ändern
returnVal = returnVal.replace(/\+/g,"-");
returnVal = returnVal.replace(/\//g,"_");

return returnVal;
}

function encrypt(str, key, iv) {
var cipher = CryptoJS.AES.encrypt(str, CryptoJS.enc.Hex.parse(key), {
keySize: 256,
blockSize: 128,
iv: CryptoJS.enc.Hex.parse(iv),
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
});
return String(cipher);
}

function parseHexString(str) {
var result = [];
while (str.length >= 8) {
result.push(parseInt(str.substring(0, 8), 16));
str = str.substring(8, str.length);
}
return result;
}

function createHexString(arr) {
var result = "";
var z;

for (var i = 0; i < arr.length; i++) {
var str = arr[i].toString(16);

z = 8 - str.length + 1;
str = Array(z).join("0") + str;

result += str;
}

return result;
}

KBA gilt sowohl für Cloud- als auch für On-Premise-Organisationen.

Bitte beachten Sie: Dieser Artikel ist eine Übersetzung aus dem Englischen. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Originalversion(en) des Produkts. In der übersetzten Version unserer Artikel können kleinere Fehler enthalten sein, z.B. in der Grammatik. Wir können zwar nicht für die vollständige Richtigkeit der Übersetzung garantieren, aber in den meisten Fällen werden Sie sie als ausreichend informativ empfinden. Im Zweifelsfall wechseln Sie bitte zurück zur englischen Version dieses Artikels.
 

Kommentare (0)