2017-11-10 2 views
0

Ich erhalte eine id_token als Teil meiner aktuellen href. Es ist in Base64 codiert. Ich versuche, sie zu entschlüsseln atob(extractedIdToken) verwenden, aber die folgende Fehlermeldung erhalten:Fehler beim Dekodieren von base64 in Javascript

Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded

Wenn ich kopiere und extrahierte id_token in meinem Code einfügen und zu einer Online-Decodierungsstelle gehen, es decodiert richtig. Hast du einen Vorschlag?

+2

Können Sie die Zeichenfolge und reproduzieren Fehlermeldung bei stacksnippets bei Frage? Siehe https://StackOverflow.com/Help/Mcve – guest271314

+0

Siehe SO: https://StackOverflow.com/Questions/22578530/Failed-To-Execute-Atob-on-Window – Mamun

+0

Ich habe mein Problem gelöst, indem Sie den Decoder in schreiben das Backend und nennen es Frontend. Siehe meine Antwort am Ende. –

Antwort

0

Dank allen für Ihre Antworten. Am Ende habe ich den Base64-Decodierungsprozess mit dem Java-Paket java.util.Base64 auf das Java-Backend verschoben.

1

ich dies immer verwenden, um in Base64 zu dekodieren und zu kodieren, versuchen Sie es

var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}; 
+0

Bitte hör auf, es wieder hinzuzufügen, das ist nicht JSON, es ist ein JavaScript-Objekt. – George

+0

Tut mir leid, ich habe nicht bemerkt, dass es bearbeitet wurde –

+0

Wie funktioniert der Code bei der Antwort Frage beantworten? Ist der Code unter Antwort von einer vorhandenen Antwort bei SO kopiert/eingefügt? – guest271314

0

In meinem Fall war das Problem, dass die codierte Zeichenfolge als Segmente behandelt werden sollte. Trenne einfach den Code mit dem Trennzeichen "." oder was auch immer dein Fall ist. Dekodieren Sie dann nur die verschiedenen Teile separat. Das hat mein Problem gelöst und ich konnte mit window.atob() dekodieren. Hoffe das hilft.

Verwandte Themen