Der folgende Code fordert ein OAuth2-Token an. Es funktioniert mit Indy 10.0.52, aber mit Indy 10 SVN 5412 erzeugt es einen 400 Bad Request Fehler aufgrund ungültiger Anfrage Anmeldeinformationen.Codierungsprobleme nach Indy-Upgrade
Ich habe Code hinzugefügt, um IdLogFile Datum zu erfassen. Das Protokoll der Version Indy 10.0.52 enthält die folgende Zeile mit den Anmeldeinformationen.
Sent 05/01/2017 18:34:35: grant_type=password&username=*************_*****-*****&password=***}%25**(**(***
Aus Sicherheitsgründen habe ich alle alphanumerischen Zeichen durch '*' ersetzt. Die Zeichen "% 25" waren ursprünglich ein "%" im tatsächlichen Kennwort. Etwas hat das ursprüngliche "%" in "% 25" übersetzt, aber nichts an den anderen Sonderzeichen geändert.
Bei der ersten Überprüfung des Protokolls vom Indy 10 SVN 5412 wurde eine Nachricht vom Server festgestellt, die auf ungültige Anmeldeinformationen hinweist. Außerdem zeigten alle Sonderzeichen in der Zeile, die der obigen Zeile entsprach, dass alle Sonderzeichen codiert waren. Der grant_type, der Benutzername und das Passwort wurden mit einer tStringList gerendert, die im Urlencoding gefunden wurde. Ich habe den Code so geändert, dass dieselben Daten mit einem Stream gerendert werden und jetzt nichts mehr codiert wird. nicht einmal die "%" wird in "% 25" übersetzt, und ich bekomme weiterhin die ungültige Anmeldeinformationen Nachricht.
Also meine Fragen sind, warum würde Indy 10.0.52 nur das "%" Zeichen in "% 25" übersetzen und wie kann ich dieses Verhalten in Indy 10 SVN 5412 replizieren?
Folgendes ist das vollständige Protokoll von der Indy 10.0.52 Version, die funktioniert.
Stat Connected.
Sent 05/01/2017 18:34:35: POST /auth/realms/hvac/tokens/grants/access HTTP/1.0<EOL>Content-Type: application/x-www-form-urlencoded; charset="utf-8"<EOL>Content-Length: 82<EOL>Authorization: Basic<EOL> **********<EOL>Host: services.ccs.utc.com:443<EOL>Accept: text/html, */*<EOL>Accept-Encoding: identity<EOL>User-Agent: Mozilla/4.0 (compatible; MSIE 8.0)<EOL><EOL>
Sent 05/01/2017 18:34:35: grant_type=password&username=*************_*****-*****&password=***}**%25**(**(***
Recv 05/01/2017 18:34:35: HTTP/1.1 200 OK<EOL>Server: Apache-Coyote/1.1<EOL>Pragma: no-cache<EOL>Cache-Control: no-store<EOL>Content-Type: application/json;charset=UTF-8<EOL>Content-Length: 569<EOL>Date: Mon, 01 May 2017 22:34:35 GMT<EOL>Connection: close<EOL><EOL>{<EOL> "access_token":"**********",<EOL> "token_type":"Bearer",<EOL> "expires_in":1800,<EOL> "refresh_token":"**********",<EOL> "id_token":"**********"<EOL>}
Stat Disconnected.
Stat Disconnected
Im Folgenden ist das vollständige Protokoll von der Indy 10 SVN 5412-Version, die mit ungültigen Anmeldeinformationen fehlschlägt.
Stat Connected.
Sent 05/02/2017 15:11:08: POST /auth/realms/hvac/tokens/grants/access HTTP/1.0<EOL>Connection: keep-alive<EOL>Content-Type: application/x-www-form-urlencoded; charset=utf-8<EOL>Content-Length: 82<EOL>Authorization: Basic **********<EOL>Host: services.ccs.utc.com<EOL>Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8<EOL>User-Agent: Mozilla/3.0 (compatible; Indy Library)<EOL><EOL>
Sent 05/02/2017 15:11:08: grant_type=password&username=*************_*****-*****&password=***}**%**(**(***<EOL>
Recv 05/02/2017 15:11:08: HTTP/1.1 400 Bad Request<EOL>Server: Apache-Coyote/1.1<EOL>Content-Type: application/json;charset=UTF-8<EOL>Content-Length: 84<EOL>Date: Tue, 02 May 2017 19:11:08 GMT<EOL>Connection: close<EOL><EOL>{<LF> "error": "invalid_grant",<LF> "error_description": "Invalid request credentials"<LF>}
Stat Disconnected.
Stat Disconnected.
Danke Remy. Durch die Umstrukturierung des Codes, der die tStringList erstellt, ist es gelungen. –