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
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
Pobranie kanał dostaje inforacje że dane konto jest nieaktywne i prezentuje klientowi ekran do powtórnej twardej autentykacjiFlaga consentstatus na poziomie rachunku
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