<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Thema "Betreff: REST-API - CD Secondary Flow" in Website &amp; Apps</title>
    <link>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/343790#M28085</link>
    <description>&lt;P&gt;Moin,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;1. &lt;STRONG&gt;Falsches Token verwendet&lt;/STRONG&gt;&lt;/H3&gt;&lt;P class=""&gt;Das ist wahrscheinlich der Hauptfehler! Der User schreibt:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P class=""&gt;"Den Wert für das 'Access-Token' habe ich aus dem: 2.1 OAuth2 Resource Owner Password Credentials Flow"&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P class=""&gt;&lt;STRONG&gt;Das ist falsch!&lt;/STRONG&gt; Beim CD Secondary Flow muss im token Parameter das &lt;STRONG&gt;Session-Token aus Schritt 2.4&lt;/STRONG&gt; (TAN-Aktivierung) verwendet werden, NICHT das Access-Token aus Schritt 2.1.&lt;/P&gt;&lt;H3&gt;2. &lt;STRONG&gt;Fehlender Authorization Header&lt;/STRONG&gt;&lt;/H3&gt;&lt;P class=""&gt;Beim CD Secondary Flow wird normalerweise zusätzlich der Authorization-Header mit dem Access-Token aus Schritt 2.1 benötigt.&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;Probier das mal aus? &lt;span class="lia-unicode-emoji" title=":zwinkerndes_Gesicht:"&gt;😉&lt;/span&gt;&lt;/P&gt;</description>
    <pubDate>Tue, 27 May 2025 16:12:02 GMT</pubDate>
    <dc:creator>FSQuant</dc:creator>
    <dc:date>2025-05-27T16:12:02Z</dc:date>
    <item>
      <title>REST-API - CD Secondary Flow</title>
      <link>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/336684#M27390</link>
      <description>&lt;P&gt;Hi,&lt;BR /&gt;&lt;BR /&gt;ich versuche mich momentan über die comdirect REST Api mit meinem Konto zu verbinden in der Hoffnung einiges automatisieren zu können.&lt;/P&gt;&lt;P&gt;Folgende Schritte funktionieren soweit ich das absehe:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;2.1 OAuth2 Resource Owner Password Credentials Flow&lt;/LI&gt;&lt;LI&gt;2.2 Abruf Session-Status&lt;/LI&gt;&lt;LI&gt;2.3 Anlage Validierung einer Session-TAN&lt;/LI&gt;&lt;LI&gt;2.4 Aktivierung einer Session-TAN&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Beim Schritt: "2.5 CD Secondary Flow" bekomme ich einen Fehler zurück:&lt;BR /&gt;{"error":"invalid_client","error_description":"Bad client credentials"}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ich verwende libCURL und baue mir den POST wie folgt zusammen:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="cpp"&gt;/**
** ===================================================
** URL: https://api.comdirect.de/oauth/token
** HTTP-Method: POST
** ===================================================
***/
curl_easy_setopt(curl, CURLOPT_URL, "https://api.comdirect.de/oauth/token");
/* Now specify we want to POST data */
curl_easy_setopt(curl, CURLOPT_POST, 1L);
/* provide a buffer to store errors in */
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);



/**
** ===================================================
** HEADER
** ===================================================
***/
/* Create header according to comdirect api description */
list = curl_slist_append(list, "Accept: application/json");
list = curl_slist_append(list, "Content-Type: application/x-www-form-urlencoded");

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);

            /**
            ** ===================================================
            ** DATA
            ** ===================================================
            ***/
            /* Create data according to comdirect api description */
            std::string str_DATA;
            char *escaped_field = curl_easy_escape(NULL, "User_********************************", 0);
            str_DATA+= std::string("client_id=")+std::string(escaped_field)+std::string("&amp;amp;");
            curl_free(escaped_field);

            escaped_field = curl_easy_escape(NULL, "********************************", 0);
            str_DATA+= std::string("client_secret=")+std::string(escaped_field)+std::string("&amp;amp;");
            curl_free(escaped_field);

            escaped_field = curl_easy_escape(NULL, "cd_secondary", 0);
            str_DATA+= std::string("grant_type=")+std::string(escaped_field)+std::string("&amp;amp;");
            curl_free(escaped_field);

            escaped_field = curl_easy_escape(NULL, "*****************", 0);
            str_DATA+= std::string("token=")+std::string(escaped_field);
            curl_free(escaped_field);
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, str_DATA.c_str());


            res = curl_easy_perform(curl);&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Den Wert für das "Access-Token" habe ich aus dem:&lt;BR /&gt;2.1 OAuth2 Resource Owner Password Credentials Flow&lt;/P&gt;&lt;P&gt;Die beiden werte "client_id" und "client_secret" habe ich gleich wie beim&amp;nbsp;&lt;BR /&gt;2.1 OAuth2 Resource Owner Password Credentials Flow&lt;BR /&gt;gesetzt und von comdirect erhalten beim anmelden für die API.&lt;BR /&gt;&lt;BR /&gt;Kann mir jemand sagen was ich bei diesem POST falsch mache?&lt;BR /&gt;&lt;BR /&gt;Viele Grüße,&lt;BR /&gt;TinTin&lt;/P&gt;</description>
      <pubDate>Tue, 25 Feb 2025 10:53:18 GMT</pubDate>
      <guid>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/336684#M27390</guid>
      <dc:creator>TinTin82</dc:creator>
      <dc:date>2025-02-25T10:53:18Z</dc:date>
    </item>
    <item>
      <title>Betreff: REST-API - CD Secondary Flow</title>
      <link>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/343790#M28085</link>
      <description>&lt;P&gt;Moin,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;1. &lt;STRONG&gt;Falsches Token verwendet&lt;/STRONG&gt;&lt;/H3&gt;&lt;P class=""&gt;Das ist wahrscheinlich der Hauptfehler! Der User schreibt:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P class=""&gt;"Den Wert für das 'Access-Token' habe ich aus dem: 2.1 OAuth2 Resource Owner Password Credentials Flow"&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P class=""&gt;&lt;STRONG&gt;Das ist falsch!&lt;/STRONG&gt; Beim CD Secondary Flow muss im token Parameter das &lt;STRONG&gt;Session-Token aus Schritt 2.4&lt;/STRONG&gt; (TAN-Aktivierung) verwendet werden, NICHT das Access-Token aus Schritt 2.1.&lt;/P&gt;&lt;H3&gt;2. &lt;STRONG&gt;Fehlender Authorization Header&lt;/STRONG&gt;&lt;/H3&gt;&lt;P class=""&gt;Beim CD Secondary Flow wird normalerweise zusätzlich der Authorization-Header mit dem Access-Token aus Schritt 2.1 benötigt.&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;Probier das mal aus? &lt;span class="lia-unicode-emoji" title=":zwinkerndes_Gesicht:"&gt;😉&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 27 May 2025 16:12:02 GMT</pubDate>
      <guid>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/343790#M28085</guid>
      <dc:creator>FSQuant</dc:creator>
      <dc:date>2025-05-27T16:12:02Z</dc:date>
    </item>
    <item>
      <title>Betreff: REST-API - CD Secondary Flow</title>
      <link>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/343791#M28086</link>
      <description>&lt;P&gt;...kam so übrigens aus ClaudeAI aufs erste Prompt raus &lt;span class="lia-unicode-emoji" title=":zwinkerndes_Gesicht:"&gt;😉&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 27 May 2025 16:13:12 GMT</pubDate>
      <guid>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/343791#M28086</guid>
      <dc:creator>FSQuant</dc:creator>
      <dc:date>2025-05-27T16:13:12Z</dc:date>
    </item>
    <item>
      <title>Betreff: REST-API - CD Secondary Flow</title>
      <link>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/361596#M30580</link>
      <description>&lt;P&gt;Hatte auch das Problem.&amp;nbsp;&lt;BR /&gt;Die Antwort von FSQuant ist falsch. Er hat halt einfach nur AI befragt ohne zu Validieren!&lt;BR /&gt;&lt;BR /&gt;Mein Fehler war, dass ich den Schritt 2.4 vergessen hatte. Der curl Aufruf zur Aktivierung der Session ist so (PATCH):&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;PRE&gt;curl --location --request PATCH 'https://api.comdirect.de/api/session/clients/&amp;lt;ClientID&amp;gt;/v1/sessions/&amp;lt;SessionID&amp;gt;' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer &amp;lt;Access Token&amp;gt;' \
--header 'x-http-request-info: {"clientRequestId":{"sessionId":"&amp;lt;SessionID&amp;gt;","requestId":"123456789"}}' \
--header 'Content-Type: application/json' \
--header 'x-once-authentication-info: {"id":"&amp;lt;TAN-ID&amp;gt;"}' \
--header 'Cookie: qSession=a11705d9.a6f46707e31346968d26a3e' \
--data '{
    "identifier": "&amp;lt;SessionID&amp;gt;",
    "sessionTanActive": true,
    "activated2FA": true
  }'&lt;/PRE&gt;&lt;P&gt;&amp;lt;Access Token&amp;gt; ist das Access Token aus dem ersten Schritt 2.1&lt;BR /&gt;&amp;lt;SessionID&amp;gt; wird mehrfach angegeben und entspricht dem Wert von clientRequestId.sessionId, was du im Schritt 2.2.1 selber gesetzt hast.&lt;BR /&gt;&amp;lt;ClientID&amp;gt; ist die Client-ID aus deinen OAuth-Credentials.&amp;nbsp;&lt;BR /&gt;&amp;lt;TAN-ID&amp;gt; bekommst du aus dem vorherigen Schritt (2.3 session validate). Die ID steht im Return Header im x-once-authentication-info Feld.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Der Aufruf für den Secondary Flow ist nun so (POST)&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;PRE&gt;curl --location 'https://api.comdirect.de/oauth/token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Bearer &amp;lt;Access Token&amp;gt;' \
--header 'Cookie: qSession=a11705d9.a6f46707e31346968d26a3e' \
--data-urlencode 'client_id=&amp;lt;Client ID&amp;gt;' \
--data-urlencode 'client_secret=&amp;lt;Client Secret&amp;gt;' \
--data-urlencode 'grant_type=cd_secondary' \
--data-urlencode 'token=&amp;lt;Access Token&amp;gt;'&lt;/PRE&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;Wichtig ist also, dass unter token das Access Token aus 2.1 kommt. Aber der Aufruf funktioniert nur, wenn mit der PhotoTAN-App die Session (2FA) authorisiert wurde und Schritt 2.4 erfolgreich war.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Falls wer von Comdirect das hier liest:&amp;nbsp;&lt;BR /&gt;1) Bitte mal die Doku (PDF) aktualisieren und klarer darstellen.&amp;nbsp;&lt;BR /&gt;2) Vllt. mal die API dahingehend überarbeiten, dass in einem Call nicht identische Werte in Header und Body übergeben werden müssen. Das verwirrt nur, weil es völlig unlogisch ist zweimal das gleiche anzugeben.&lt;BR /&gt;3) Access Flows vereinfachen. Warum braucht es 4 Calls PLUS einen Swipe in der Photo TAN App um das secondary access token zu erhalten. Also 2FA ist ja supi und soll bitte bleiben. Aber 4 API Calls um letzendlich ein access token zu erhalten ist crazy. Security through obscurity oder was soll das sein?&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 09 Dec 2025 06:17:13 GMT</pubDate>
      <guid>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/361596#M30580</guid>
      <dc:creator>svebert</dc:creator>
      <dc:date>2025-12-09T06:17:13Z</dc:date>
    </item>
    <item>
      <title>Betreff: REST-API - CD Secondary Flow</title>
      <link>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/361601#M30581</link>
      <description>&lt;P&gt;Moin svebert,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;keine Ahnung, warum du dich so aufregst?&amp;nbsp;&lt;/P&gt;&lt;P&gt;Erstens steht da, dass ich das aus ClaudeAI rauskopiert habe als Antwort aus meinem Workspace, in den ich die Frage von&amp;nbsp;&lt;a href="https://community.comdirect.de/t5/user/viewprofilepage/user-id/44336"&gt;@TinTin82&lt;/a&gt;&amp;nbsp; reinkopiert hatte.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Zweitens: Wenn dir der fehlerhafte Ansatz trotzdem ein kleine Inspiration gegeben hat und du es jetzt gelöst hast, ist es ja gut?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Drittens: Ich arbeite selbst mit C# und habe eine Client-Lib, die all das für mich kappselt - solltest du auch machen: Du kannst als Pasis die Postman Docu nehmen. Dann musst du dich mit diesen lowlevel Fragen weniger rumschlagen.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Zum unteren Teil deines Beitrags:&lt;/P&gt;&lt;P&gt;Deine Wünsche sind gut und nett aber mit den Verbesserungsvorschlägen wirst du hier leider gegen die Wand laufen &lt;span class="lia-unicode-emoji" title=":leicht_lächelndes_Gesicht:"&gt;🙂&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Das mit der Photo-TAN kann man diskutieren... Viel wichtiger wäre, dass die Sessions serverseitig nicht immer wieder regelmäßig gecancelt werden, sonst könnte die App dauerhaft eingeloggt sein....&lt;/P&gt;</description>
      <pubDate>Tue, 09 Dec 2025 07:49:56 GMT</pubDate>
      <guid>https://community.comdirect.de/t5/website-apps/rest-api-cd-secondary-flow/m-p/361601#M30581</guid>
      <dc:creator>FSQuant</dc:creator>
      <dc:date>2025-12-09T07:49:56Z</dc:date>
    </item>
  </channel>
</rss>

