Hilfe
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

Funktionsstörung REST API

api-user-99
Autor
5 Beiträge

- Ich bekomme nach der erfolgreichen Erzeugung OAuth2 Token den Comdirect-Einheitsfehler 'Bei der von Ihnen gewählten Funktion ist eine Störung aufgetreten', HTTP 'forbidden'. Diverse Beiträge im Forum legen die Vermutung nahe, dass die comdirect IT nur diese eine Fehlermeldung quer über alle Bereiche und Fehlerursachen hat - die Meldung hilft also in keiner Weise weiter.

- Die aktuelle API Spec listet die letzte Änderung in April 2020. Seither habe ich mehrere Dutzend Aktien Transaktionen über meine Software abgewickelt, die letzte im letzten Herbst. Eigene Änderungen in der Authentisierung habe ich nicht gemacht. 

- Der Support kann die von der API gemeldete nicht nachvollziehen ('... steht die REST API ohne Einschränkungen zur Verfügung')

 

Deshalb die folgenden Fragen an die Community:

- hat sich jemand im Jahr 2022 erfolgreich per SMS TAN in die API eingeloggt ? 

- ist etwas bekannt über (evtl. undokumentierte) Änderungen an der API zwischen 01.10.2021 und Mitte Februar 2022, die dieses Problem zur Folge haben könnte ?

 

Ich wäre dankbar für 'sachdienliche' Hinweise aller Art.

 

apiuser99_1-1650732260792.png

 

 

4 ANTWORTEN

SMT_Jessica
ehemaliger Mitarbeiter
1.179 Beiträge

Hallo @api-user-99

 

und vielen Dank für deine Geduld. Ich habe beim Fachbereich nachgefragt und hier wurde die Funktion des mobileTAN-Verfahrens erfolgreich getestet. Es gab hier auch keine Änderungen.

 

Es werden folgende Informationen benötigt:

 

  • Programmiersprache die verwendet wurde (Python zerstört z.B. sehr gerne JSON-Objekte)
  • Welcher Prozessschritt wirft den Fehler - er hat nur geschrieben nach dem Login heißt das beim:
    • GET auf Session
    • Session POST -> validate
    • Session Patch.
  • Den eigentlichen HTTP-Request des fehlerhaften Requests.
  • Code wäre ggf. Interessant – wenn das nicht gerade Cobol ist.

Danke dir vielmals für deine Mithilfe.

 

Viele Grüße

Jessica

api-user-99

Die App ist C#, .Net core 3.1

 

Das Kommunikations Log:

 

Apr 27 20:37:06 wallet.inside dotnet[784]: Starting ProtoOAuthToken
Apr 27 20:37:06 wallet.inside dotnet[784]: Send body: {"client_id":"User_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","client_secret":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","username":"XXXXXXXX","password":"XXXXXX","grant_type":"password"}
Apr 27 20:37:06 wallet.inside dotnet[784]: POST https://api.comdirect.de/oauth/token
Apr 27 20:37:08 wallet.inside dotnet[784]: Received OK, headers: [{"Key":"Server","Value":["nginx"]},{"Key":"Date","Value":["Wed, 27 Apr 2022 18:37:07 GMT"]},{"Key":"Connection","Value":["close"]},{"Key":"Vary","Value":["Accept-Encoding","Origin","Access-Control-Request-Method","Access-Control-Req>
Apr 27 20:37:08 wallet.inside dotnet[784]: Received content: {"access_token":"5f3ec961-580d-48a3-81da-298aeb344efd","token_type":"bearer","refresh_token":"9c967f9b-a87f-4862-bc53-a714c8b4e604","expires_in":599,"scope":"TWO_FACTOR","kdnr":"XXXXXXXXXX","bpid":XXXXXXX,"kontaktId":XXXXXXXXXX}
Apr 27 20:37:08 wallet.inside dotnet[784]: Finished ProtoOAuthToken

Apr 27 20:37:08 wallet.inside dotnet[784]: Starting ProtoSessions
Apr 27 20:37:08 wallet.inside dotnet[784]: Send body: {}
Apr 27 20:37:08 wallet.inside dotnet[784]: GET https://api.comdirect.de/api/session/clients/user/v1/sessions
Apr 27 20:37:08 wallet.inside dotnet[784]: Send headers: {"x-http-request-info":"{\"clientRequestId\":{\"sessionId\":\"8a50782e2f2247b48c4bfb5d8685813d\",\"requestId\":\"203708035\"}}","Authorization":"Bearer 5f3ec961-580d-48a3-81da-298aeb344efd","Accept":"application/json"}
Apr 27 20:37:08 wallet.inside dotnet[784]: Received Forbidden, headers: [{"Key":"Server","Value":["nginx"]},{"Key":"Date","Value":["Wed, 27 Apr 2022 18:37:08 GMT"]},{"Key":"Connection","Value":["keep-alive"]},{"Key":"Vary","Value":["Accept-Encoding"]},{"Key":"ETag","Value":["\"XXXXXXXXXXXXX\""]}]
Apr 27 20:37:08 wallet.inside dotnet[784]: <!doctype html>
Apr 27 20:37:08 wallet.inside dotnet[784]: <html>
Apr 27 20:37:08 wallet.inside dotnet[784]: <head>
Apr 27 20:37:08 wallet.inside dotnet[784]: <title>comdirect - eine Marke der Commerzbank AG</title>
Apr 27 20:37:08 wallet.inside haug.stocks.serve[784]: <!doctype html>
<html>

..........

 

ein Stück Code:

 

public virtual void Execute(SessionData sessionData)
        {
            RequestId = DateTime.Now.ToString("HHmmssfff");
            FillFields(sessionData);
            Session.Msg(LogLevel.Information, "Starting " + this.GetType().Name);
            Session.Msg(LogLevel.Information, "Send body: " + ComSerializer.Serialize(Body, ConversionPeer.Comdirect));
            HttpClient http = new HttpClient();
            http.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
            HttpResponseMessage response = null;
            if (this.UrlEncoded && Method == HttpMethod.Post)
            {
                IEnumerable<KeyValuePair<string, string>> body =
                Body.Select(x => new KeyValuePair<string, string>(x.Key, (string)x.Value));
                FormUrlEncodedContent content = new FormUrlEncodedContent(body);
                content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
                Session.Msg(LogLevel.Information, Method.ToString() + " " + BaseUrl + Path);
                response = http.PostAsync(BaseUrl + Path, content).Result;
            }
            else if (Method == HttpMethod.Get || Method == HttpMethod.Post || Method == HttpMethod.Patch || Method == HttpMethod.Delete)
            {
                AddStandardHeaders(sessionData);
                Headers.ForEach(header => http.DefaultRequestHeaders.Add(header.Key, header.Value));
                UriBuilder uriBuilder = new UriBuilder(BaseUrl + Path);
                if (Query.Count > 0)
                {
                    var query = HttpUtility.ParseQueryString(uriBuilder.Query);
                    Query.ForEach(x => query[x.Key] = x.Value);
                    uriBuilder.Query = query.ToString();
                }
                HttpRequestMessage message = new HttpRequestMessage(Method, uriBuilder.Uri);
                Session.Msg(LogLevel.Information, Method.ToString() + " " + uriBuilder.Uri.ToString());
                HttpContent content = new StringContent(ComSerializer.Serialize(Body, ConversionPeer.Comdirect), System.Text.Encoding.UTF8, "application/json");
                message.Content = content;
                Session.Msg(LogLevel.Information, "Send headers: " + ComSerializer.Serialize(Headers, ConversionPeer.Web));
                response = http.SendAsync(message).Result;

            }
            Receive(response, sessionData);
            Session.Msg(LogLevel.Information, "Finished " + this.GetType().Name);
        }

ehemaliger Nutzer
ohne Rang
0 Beiträge

Hallo @api-user-99,

 

der Call wird aktuell abgelehnt weil im GET-Request ein Body mitgeschickt wird, auch wenn es ein Leerstring ist. (z.B. "", {} etc.).

 

Bei Aufrufen der comdirect API ist es nicht gestattet den Content/Body in HTTP GET-Calls zu setzen.

 

Viele Grüße

Mario

api-user-99
Autor
5 Beiträge

Ich habe wie vermutet beim GET einen leeren Body geschickt ('{}')

 

Wenn ich gar keinen schicke, funktioniert es wieder. Das hat sich definitiv geändert auf Server Seite seit dem letzten Herbst, evtl. ein Update, das striktere Format-Kontrollen brachte.

 

Problem ist gelöst, vielen Dank für Eure Hilfe