Stimmt, das ist ein guter Einwand!
Hier der Beitrag den ich Forum von Comdirect gepostet habe:
Danach eine Übersicht meiner requests und responses.
Beitrag Comdirect Community Forum:
"
Meine momentane Situation:
Ich habe die Doku Schritt für Schritt verfolgt und bin in dem OAuth2-Verfahren soweit gekommen, dass ich nach Schritt 2.5 "CD Secondary Flow" ein "200 OK" bekomme.
Leider bekomme ich bei allen weiteren Anfragen an "ACCOUNT" ein "403 Forbidden" zurück und ich weiß nicht wieso.
Frage 1: "Abruf Session-Status"
So wie ich es verstehe geht es in Schritt 2.2 darum ein Session-Objekt für alle weiteren Schritte anzufordern.
Ist Schritt 2.2 auch dafür da um zu ermitteln, ob die TAN-Authentifizierung bereits erfolgt ist?
Kann man diesen Schritt auch im späteren Verlauf wiederholen, um dem Programm die Möglichkeit zu geben, zu ermitteln, ob die TAN bereits vom Nutzer freigeben wurde?
Frage 1.1: "Abruf Session-Status"
In der Beschreibung zum Session-Objekt steht, dass "activated2FA" angibt, ob eine 2-Faktor-Authentifizierung vorliegt.
Bedeutet "true" in diesem Fall, dass das Verfahren 2-Faktor-Authentifizierung im Allgemeinen vorliegt ,unabhängig von der Freigabe, oder ob die 2-Faktor-Authentifizierung erfolgreich durchgeführt wurde?
Frage 2: "sessionId"
Im Beispiel-Header bei Punkt 2.2 "Abruf Session-Status" ist angegeben, dass die "sessionId" diesem Wert entspricht: "123_beliebige_ID_fuer_Session_12".
Im Moment erzeuge ich für die "sessionId" eine zufällige zehn-stellige Nummer und für die requestId eine sieben-stellige.
Soll der Nutzer zufällige "sessionIds" und "requestIds" generieren? Wenn ja, wie lang sollen diese sein?
Frage 2.1: "sessionId"
In der Angabe zum Path bei Punkt 2.3 "Anlage Validierung einer Session-Tan" ist angeben dass eine "sessionId" benötigt wird.
Bei der Beschreibung dieser "sessionId" ist angeben, dass es sich um den "identifier" aus dem Session-Objekt handelt.
In der Beschreibung des Session-Objekts unter 2.2.1 ist angegeben, dass der "identifier" die UUID der Session und nicht meine zufällig generierte "sessionId" ist.
Im Weiteren steht in jedem Beispiel zur "x-http-request-info" sowie in jedem Beispiel zum Body bei "sessionId" die Angabe "123_beliebige_ID_fuer_Session_12".
Wann verwendet man die von mir generierte "sessionId" und wann die von Comdirect erzeugte UUID?
Frage 3: "Aktivierung einer Session-Tan"
In meiner photoTan-App bekomme ich nach Schritt 2.3 "Anlage Validierung einer Session-TAN" einen Auftrag zur Tan-Freigabe auf meine Photo-Tan-App auf meinem Handy geschickt.
Im Header der Response nach Schritt 2.3 konnte ich nachvollziehen, dass es sich dabei um das Verfahren "P_TAN_PUSH" handelt.
In der Beschreibung zum Response-Header unter 2.3 steht bei "challenge", dass im Falle von P_TAN_PUSH die challenge entfällt.
Heißt das, dass ich Punkt 2.4 "Aktivierung einer Session-TAN" auslassen kann?
Wenn ich Schritt 2.4 auslasse, bekomme ich nach Schritt 2.5 "CD Secondary Flow" kein "200 OK" mehr sondern ein "400 Bad Request".
Frage 3.1: "Aktivierung einer Session-Tan"
Wenn ich Schritt 2.1 bis 2.3 ausführe, das Programm kurz warten lasse um meine Photo-Tan zu authentifizieren und dann Schritt 2.4 und Schritt 2.5 ausführe bekomme ich jeweils ein "200 OK".
Wenn ich Schritt 2.1 bis 2.4 direkt hintereinander ausführe bekomme ich nach 2.4 ein "400 Bad Request".
Wenn ich Schritt 2.1 bis 2.3 ausführe, das Programm kurz warten lasse um meine Photo-Tan zu authentifizieren, 2.4 auslasse, und dann Schritt 2.5 ausführe, bekomme ich ein "400 Bad Request"
Wozu dient Punkt 2.4 "Aktivierung einer Session-Tan" genau? Geht es darum die Tan zu authentifizieren? Oder geht es darum die Tan nach der Authentifizierung zu aktivieren? Wenn ja, warum ist das notwendig?
Frage 4: Ist Schritt 2.5 "CD Secondary Flow" optional?
Ich möchte lediglich meine Konto und Umsatzdaten von "ACCOUNTS" abfragen und benötige keinen Zugriff auf Banking- oder Brokerage-Schnittstellen.
"
Ende Beitrag Comdirect Community Forum
Übersicht Requests und Responses:
In diesem Fall habe ich Schritt 2.1 bis 2.3 direkt hintereinander ausgeführt, das Programm 10 Sekunden warten lassen, während ich die TAN freigebe, und dann Schritt 2.4, 2.5 und schließlich die eigentliche Anfrage Schritt 4.1.1 ausgeführt.
Schritt 2.1: OAuth2 Authentifikations-Token erzeugen
Request:
- Methode: POST
- URI: https://api.comdirect.de/oauth/token
- Header1: Accept; application/json
- Header2: Content-Type; application/x-www-form-urlencoded
- Body: password=<replaced_for_privacy>&grant_type=password&client_secret=<replaced_for_privacy>&client_id=<replaced_for_privacy>&username=<replaced_for_privacy>
Response:
- Status-Code: 200
- Headers:
java.net.http.HttpHeaders@2ba7792e { {cache-control=[no-store], connection=[close], content-language=[en-US], content-type=[application/json;charset=UTF-8], date=[Mon, 24 Oct 2022 20:53:33 GMT], referrer-policy=[strict-origin-when-cross-origin], server=[nginx], set-cookie=[qSession=24172093.b8e9ce76ee1d20052749279; domain=.comdirect.de; path=/; secure], strict-transport-security=[max-age=31536000; includeSubDomains], vary=[Accept-Encoding, Accept-Encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers], x-content-type-options=[nosniff], x-frame-options=[sameorigin], x-xss-protection=[1; mode=block]} }
{
"access_token": "bf40e103-4f9f-4d84-8c82-1088a9927097",
"refresh_token": "d09a5a9c-2499-4c07-9284-a18f7b27e6ad",
"scope": "TWO_FACTOR",
"bpid": 10528203,
"token_type": "bearer",
"expires_in": 599,
"kontaktId": "<replaced_for_privacy>",
"kdnr": "<replaced_for_privacy>"
}
Schritt 2.2: Abruf Session-Status
Request:
- Methode: GET
- URI: https://api.comdirect.de/api/session/clients/<clientID_replaced_for_privacy>/v1/sessions
- Header1: Accept; application/json
- Header2: Authorization; Bearer bf40e103-4f9f-4d84-8c82-1088a9927097
- Header3: x-http-request-info; {"clientRequestId":{"requestId":"5105825","sessionId":"4074136069"}}
- Header4: Content-Type; application/json
- Body: no body
Response:
- Status-Code: 200
- Headers:
java.net.http.HttpHeaders@6c1442b { {cache-control=[no-cache, no-store, max-age=0], connection=[close], content-language=[en-US], content-type=[application/json;charset=UTF-8], date=[Mon, 24 Oct 2022 20:53:33 GMT], referrer-policy=[strict-origin-when-cross-origin], server=[nginx], set-cookie=[qSession=24172093.4074136069:c747e70af6de; domain=.comdirect.de; path=/; secure], strict-transport-security=[max-age=31536000; includeSubDomains], vary=[Accept-Encoding, Accept-Encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers], x-content-type-options=[nosniff], x-frame-options=[sameorigin], x-xss-protection=[1; mode=block]} }
{
"identifier": "87459139FE1E4BF78DB5BB209707357D",
"sessionTanActive": false,
"activated2FA": false
}
Schritt 2.3: Anlage Validierung einer Session-TAN
Request:
- Methode: POST
- URI: https://api.comdirect.de/api/session/clients/<clientID_replaced_for_privacy>/v1/sessions/4074136069/validate
- Header1: Accept; application/json
- Header2: Authorization; Bearer bf40e103-4f9f-4d84-8c82-1088a9927097
- Header3: x-http-request-info; {"clientRequestId":{"requestId":"5105825","sessionId":"4074136069"}}
- Header4: Content-Type; application/json
- Body:
{
"identifier": "87459139FE1E4BF78DB5BB209707357D",
"sessionTanActive": true,
"activated2FA": true
}
Response:
- Status-Code: 201
- Headers:
java.net.http.HttpHeaders@514cfba9 { {cache-control=[no-cache, no-store, max-age=0], connection=[close], content-language=[en-US], content-type=[application/json;charset=UTF-8], date=[Mon, 24 Oct 2022 20:53:33 GMT], referrer-policy=[strict-origin-when-cross-origin], server=[nginx], set-cookie=[qSession=24172093.4074136069:0faf4c551225; domain=.comdirect.de; path=/; secure], strict-transport-security=[max-age=31536000; includeSubDomains], vary=[Origin, Access-Control-Request-Method, Access-Control-Request-Headers], x-content-type-options=[nosniff], x-frame-options=[sameorigin], x-once-authentication-info=[{"id":"225818042","typ":"P_TAN_PUSH","availableTypes":["P_TAN_PUSH","P_TAN","P_TAN_APP"],"link":{"href":"/api/session/v1/authentications/C9A4B36C23D94C44A8BDEDC56B7B8D90","rel":"related","method":"GET","type":"application/json"}}], x-xss-protection=[1; mode=block]} }
{
"identifier": "87459139FE1E4BF78DB5BB209707357D",
"sessionTanActive": true,
"activated2FA": true
}
Programm 10 Sekunden pausiert, während ich auf meinem Handy in der PhotoTan-App die TAN authentifiziere
Schritt 2.4: Aktivierung einer Session-TAN
Request:
- Methode: PATCH
- URI: https://api.comdirect.de/api/session/clients/<clientID_replaced_for_privacy>/v1/sessions/4074136069
- Header1: Accept; application/json
- Header2: Authorization; Bearer bf40e103-4f9f-4d84-8c82-1088a9927097
- Header3: x-http-request-info; {"clientRequestId":{"requestId":"5105825","sessionId":"4074136069"}}
- Header4: Content-Type; application/json
- Header5: x-once-authentication-info; {"id":"225818042"}
- Body:
{
"identifier": "4074136069",
"sessionTanActive": true,
"activated2FA": true
}
Response:
- Status-Code: 200
- Headers:
[Server: nginx, Date: Mon, 24 Oct 2022 20:53:43 GMT, Content-Type: application/json;charset=UTF-8, Connection: close, Vary: Accept-Encoding, Vary: Origin, Vary: Access-Control-Request-Method, Vary: Access-Control-Request-Headers, X-Content-Type-Options: nosniff, Cache-Control: no-cache, no-store, max-age=0, Referrer-Policy: strict-origin-when-cross-origin, Strict-Transport-Security: max-age=31536000; includeSubDomains, X-Frame-Options: sameorigin, X-XSS-Protection: 1; mode=block, Content-Language: en-US, set-cookie: qSession=24172093.4074136069:0f18f048af4a; domain=.comdirect.de; path=/; secure]
{
"identifier": "87459139FE1E4BF78DB5BB209707357D",
"sessionTanActive": true,
"activated2FA": true
}
Schritt 2.5: CD Secondary Flow
Request:
- Methode: POST
- URI: https://api.comdirect.de/oauth/token
- Header1: Accept; application/json
- Header2: Content-Type; application/x-www-form-urlencoded
- Body: grant_type=cd_secondary&client_secret=<clientSecret_replaced_for_privacy>&client_id=<clientID_replaced_for_privacy>&token=bf40e103-4f9f-4d84-8c82-1088a9927097
Response:
- Status-Code: 200
- Headers:
java.net.http.HttpHeaders@96aafdc { {cache-control=[no-store], connection=[close], content-language=[en-US], content-type=[application/json;charset=UTF-8], date=[Mon, 24 Oct 2022 20:53:44 GMT], referrer-policy=[strict-origin-when-cross-origin], server=[nginx], set-cookie=[qSession=24172093.78840d133d004fd63354ade; domain=.comdirect.de; path=/; secure], strict-transport-security=[max-age=31536000; includeSubDomains], vary=[Accept-Encoding, Accept-Encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers], x-content-type-options=[nosniff], x-frame-options=[sameorigin], x-xss-protection=[1; mode=block]} }
{
"access_token": "7c09e2db-dc6b-4881-8536-aa084a244130",
"refresh_token": "4f88b8cd-2069-4515-9403-3e67c8299bb8",
"scope": "BANKING_RW BROKERAGE_RW MESSAGES_RO REPORTS_RO SESSION_RW",
"bpid": 10528203,
"token_type": "bearer",
"expires_in": 599,
"kontaktId": <kontaktId_replaced_for_privacy>,
"kdnr": "<kdnr_replaced_for_privacy>"
}
Schritt 4.1.1: Abruf AccountBalances alle Konten
Request:
- Methode: GET
- URI: https://api.comdirect.de/api/banking/v2/accounts/<clientID_replaced_for_privacy>/balances
- Header1: Accept; application/json
- Header2: Authorization; Bearer bf40e103-4f9f-4d84-8c82-1088a9927097
- Header3: x-http-request-info; {"clientRequestId":{"requestId":"5105825","sessionId":"4074136069"}}
- Header4: Content-Type; application/json
- Body: no body
Response:
- Status-Code: 403
- Headers:
java.net.http.HttpHeaders@1539ea71 { {cache-control=[no-cache, no-store, max-age=0], connection=[keep-alive], content-language=[en-US], content-length=[0], content-type=[*/*;charset=UTF-8], date=[Mon, 24 Oct 2022 20:53:44 GMT], referrer-policy=[strict-origin-when-cross-origin], server=[nginx], strict-transport-security=[max-age=31536000; includeSubDomains], vary=[Origin, Access-Control-Request-Method, Access-Control-Request-Headers], x-content-type-options=[nosniff], x-frame-options=[sameorigin], x-xss-protection=[1; mode=block]} }