Skip to main content

Zgody XS2A- implementacja PSD2Hub

Maxime avatar
Written by Maxime
Updated over 4 months ago
  • kolor czarny- wymagania banku

  • Kolor niebieski- implementacja po stronie PSD2Hub

Definicja pojęć

Zgoda – Jest to dokument który klient akceptuje i na podstawie którego Bank uzyskuje prawo do pewnych czynności. Definiujemy w tym momencie 3 rodzaje zgód:

  • Ogólne – jak np. zgoda na świadczenie usług AIS. Tego typu zgoda sprawia, że jest możliwe prezentowanie ekranów powiązanych z AIS

  • Dostępowe – jak np. zgoda na pobieranie salda konta. Tego typu zgoda daje uprawnienia do pobierania danych z kont innych banków

  • Przetwarzające – jak np. zgoda na scoring kredytowy. Tego typu zgoda pozwala na przetwarzanie pobranych danych na potrzeby dodatkowych celi

ISM-CA – Centrum Autoryzacji w strukturze PKO gdzie są przechowywane informacje na temat wszystkich zgód udzielonych przez klienta. W szczególności jest przechowywane:

  • Dane identyfikacyjne klienta

  • Identyfikator zgody: ISM-CA:ID

  • Daty nadania, odwołania zgody

  • Konta których dotyczy zgoda (puste jeśli zgoda globalna)

  • Cel definiujący dostępy – patrz dalsze punkty

  • Stan zgody (stworzona, aktywna, wygaśnięta itd.)

Identyfikator ISM-CA jest przekazywany w metodzie /api/bank/{bankId}/authorize i zwracany w callback

Privilige – konkretne uprawnienie które definiuje ASPSP w swoim API. Każde ASPSP może definiować privilige dowolnie i z dowolną granularnością.

Zakładamy, że my tego nie słownikujemy po swojej stronie- trzymamy listę privilige w consent_template w JSON

Purpose – Cel. Jest to abstrakcja definiująca po co dana zgoda została udzielona i na co ona pozwala. Przykrywa to w jakim standardzie PSD2 API działa dany ASPSP i jak definiuje Privilige.

Zakładam, że to jedyny słownik jakim komunikujemy się na styku TPP-PSD2Hub. Pytanie jak zarządzamy i definiujemy ten słownik.

SZUP (szablon uprawnień) – reprezentacja w bankup danego Purpose w zależności od standardu PSD

U nas jest CONSENT_TEMPLATE

ZUP (zestaw uprawnień) – Konkretna instancja SZUP która przechowuje m.in. dane identyfikacyjne klienta, konta oraz wszystko predefiniowane w SZUP

U nas jest CONSENT

Access Token – Token który pozwala na dostęp do danych zdefiniowanych w SZUP w danym ASPSP

AISPAuthirization.accesstoken

Data Lake – Miejsce gdzie Bank przechowuje pobrane dane na potrzeby ewidencjonowania i / lub dodatkowego przetwarzania

B-DB – Bankupowa baza znormalizowanych danych pobranych klienta.

LDS

AIS - agregacja rachunku

[KANAŁ] Klient akceptuje regulamin, wybiera bank i konta który chce podłączyć

[XS2A] Regulamin jest przetwarzany na Purpose

[XS2A] Purpose, bank oraz konta sa przekazywane do Bankup

W tym celu wywoływana jest metoda /api/bank/{bankId}/authorize
2 scenariusze:

  • TPP ma już listę kont (wariant z pobraniem listy rachunków i wyborem rachunków po stronie TPP)

  • TPP nie ma jeszcze listy rachunków- wariant z wyborem listy rachunków po stronie ASPSP (po przekierowaniu)

Z następującym parametrami
{
"userId": "string",
"months": x,
"values": [
{
"key": "string",
"value": "string"
}
],
"saveCredentials": true,
"externalconsentid": string,
"externalconsentguid": string,
"purpose": [
{
"key": "string"
}
]
}

  • Na podstawie zestawu purposeid wybierane są odpowiednie consent_template

  • consent_template zawiera JSON ze stała strukturą opisującą uprawnienia jaka jest wstawiana w wywołaniu API danego ASPSP

  • na podstawie sumy (do ustalenia jak sumować te JSONy) tworzony jest wpis w tabeli consent + wiązanie do consent_template (tabela consent-consent_template)

  • w tabeli consent wstawiane są:

    • id – unikalny id danej zgody

    • sessionid- identyfikator sesji

    • externalid- wartość (dla Finat to będzie ISM-CA:ID)

    • externalguide- token, który będzie zwracany przy callback

    • bankid

    • JSON wynikowy z połączenia JSON'ów dla wybranych consent_template

  • Purpose- słownik wartości jakie możemy dostawać od TPP (FINAT). W wywołaniu /api/bank/{bankId}/authorize możemy otrzymać 1 lub więcej purpose

  • Przekazanie purpose, który nie jest zdefiniowany w słowniku PSD2Hub powoduje komunikat błędu, sesja nie jest realizowana.

  • Consent_template – szablon zgody dla danego purpose w danym banku. Zawiera JSON opisujący payload jaki będzie sklejamy i wklejany do wywołania API tego konkretnego banku

  • Consent-instancja zgody powstała w wyniku złożenia consent_template'ów dla przekazanej listy purpose'ów.

[BANKUP] sprawdza który SZUP powinien być użyty dla danego purpose i danego Banku

j.w.

Na tym etapie następuje związanie klienta, z ZUP oraz wybrany „ISM-CA:ID" (stworzony nowy, bądź wybrany już istniejący)

j.w. – tworzony jest rekord w consent

[BANKUP] zwraca URL gdzie ma się odbyć twarda autentykacja.

Odpowiedź z metody /api/bank/{bankId}/authorize

[KANAŁ] pozwala klientowi się twardo autentykowac po czym przekazuje do XS2A rezultat, w szczególności CODE

[XS2A] zapisuje do ISM-CA nową zgodę, bądź aktualizuje poprzednią

[XS2A] przekazuje do Bankup CODE oraz resztę danych

Przekazywany do PSD2Hub jest kod poprzez wywołanie metody /api/bank/{bankId}/authorize
{
userId: "userId",
months: x,
sessionId: "sessionId",
values:[
{
key: "Consent",
value:"—code—"
}
]
}
Tworzony jest lub aktualizowany wpis w tabeli PSD2context i powiązanie consent-psd2context

[BANKUP] wymienia CODE na ACCESS-TOKEN i wiąże go z ZUP

[BANKUP] przekazuje to XS2A potwierdzenie zakończenia autentykacji

Po otrzymaniu access token i refresh token wołany jest callback wystawiany przez XS2A z zawartością:

  • sessionid

  • externalguid

  • Stage: authentication

  • Status: success

JSON zwracany przy wywołaniu zarejestrowanego adresu callback

{

„tpptoken": „<token provided by TPP when initialising AIS session e2-e identifier>",

„sessionid": „<sessionId>",

"stage": „accounts",

"status": "inProgress",

"accountsFetchedCount": 2,

"accountsProcessedCount": 0

}

Wywołanie callback możliwe jest przy każdej zmianie pary wartości stage/status.

[XS2A] ustawia stan zgody w ISM-CA na aktywny

[XS2A] zwraca do kanału informacje o zakończeniu autentykacji

[KANAŁ] rozpoczyna korzystanie ze zgody

Tagowanie danych:

  • Dane są przechowywane w dwóch bazach. Jedna po stronie Banku tzw „DataLaka" drugi po stronie Bankup (fizycznie na serwerach Finat) tzw. „B-DB"

  • Czy dane w obu bazach powinny być takie same? Jeśli tak to czy da się to jakoś zoptymalizować?

  • Dane są tagowane następującymi informacjami:

  • Klient ID

  • Purpose

  • ISM-CA:ID

Każdy rekord z tabeli transaction i bankaccount ma referencję do consent (wiele do wielu).

Dodatkowo dane przechowują informacje o:

  • Rodzaju danych (tzn transakcja, szczegóły konta, itp.)

  • Data pobraniaNasz import date

  • Powiązana akcja użytkownika

Pobieranie danych z APSPS:

  • Po zakończeniu procesu autentykacji Bankup uruchamia job na danych ZUP który pobiera wszystkie dostępne dane. Dane pobrane przez ten job są tagowane zgodnie z informacjami zapisanymi w ZUP

  • Job zaciąga dane w zdefiniowanych interwałach czasowych, bądź w odpowiedzi na aktywność klienta.

  • Odwołanie zgody sprawia że job jest zatrzymywany

Reaktywacja zgody gdy access token wygaśnie

  1. job nie może pobrać danych, job zostaje zatrzymany a powiązane konta oznaczone jako nie aktywne.U nas na tych rachunkach zmieniać powinna się flaga IsSyncOffline lub sterowanie tylko consentstatus

  2. Pobranie kanał dostaje inforacje że dane konto jest nieaktywne i prezentuje klientowi ekran do powtórnej twardej autentykacjiFlaga consentstatus na poziomie rachunku

  3. Proces twardej autentykacji przebiega zgodnie z punktem 2, z dokładnością do tego, że zamiast nowego ISM-CA:ID zostaje zwrócony ten z joba 5.aTu do omówienia- jak sprawdzamy czy już mamy consent

Zmiana zakresu zgody: dodanie / usunięcie rachunku.

Jeden bank nie może wystawić kilku access tokenów dla jednego klienta. To znaczy, wszystkie konta danego klienta z danego ASPSP są udostępniane na podstawie jednego access tokenu.

Wszystkie konta – tzn wszystkie konta na które klient wyraził zgodę

Dodanie / usunięcie konta.

Tego typu operacja wymaga dezaktywacji bieżącego access tokenu i uzyskanie nowego. Nowy token będzie powiązany z innym zakresem uprawnień (inna lista kont) więc wymaga nowego ISM-CA:ID

Dezaktywacja zgody przez klienta w ASPSP

Jest to flow jeszcze nie przeanalizowany. Na chwilę obecną zakładamy, że:

  • klient odwołując zgodę po stronie ASPSP sprawia że nie możemy pobierać więcej danych. Access token traci ważność, synchronizacja nie może się odbyć

  • Zgoda w kanałach ciągle jest aktywna więc kanały mogą prezentować dane powiązane z informacją, że są nie aktywne(błąd synchronizacji)

  • Klient może przejść proces twardej autentykacji by reaktywować dostęp do kont. ISM-CA:ID nie ulegnie zmianie

My dostaniemy grant-invalid i zmieniamy consentStatus na 1. Batch nie odświeża tych rachunków

Callback

Opis mechanizmu tutaj: Callback services

Lista zmian i rozszerzeń po stronie PSD2Hub

  • model danych obejmujący:

    • purpose

    • purpose-consenttemplate

    • consenttemplate

    • consentconsenttemplate

    • consent

  • parametryzacja listy purpose

  • parametryzacja zakresów (priviliges) dla PolishAPI w consenttemplate.JSON

  • rozszerzenie listy parametrów jakie przyjmuje metoda /api/bank/{bankId}/authorizeali

  • oznaczenie rachunków i transkacji wartością consent (tagowanie)

    • "externalconsentid": string

    • "externalconsentguid": string

  • mechanizmy callback

Did this answer your question?