# csob Multi-tenant REST integrace na **ČSOB PSD2 (Open Banking) API** podle Czech Open Banking Standard (COBS). .NET 8 služba běžící v AppFactory za reverse proxy `/apps/csob`. Pokrývá **AISP** (informace o účtech), **PISP** (iniciace plateb, trvalých příkazů a inkas vč. sign/SCA flow), **consents** a **OAuth2** helper (Authorization Code flow). ## Architektura Služba je **bezstavový proxy** – neukládá žádné credentials. Volající klientská služba předává veškeré citlivé údaje (eIDAS certifikát, OAuth client id/secret, access token, APIKEY, TPP name) **per-request v HTTP hlavičkách** (jen přes TLS). mTLS se na základě certifikátu z hlavičky staví per-request a klienti se cachují podle thumbprintu certifikátu. Nic se neloguje ani neukládá na disk. Strukturně zrcadlí sesterskou službu `idoklad` (Configuration → env, Credentials → hlavičky, Client factory + Accessor, Services, Controllers, Infrastructure middleware + Swagger operation filter, `/docs`). ## Endpointy Veřejně dostupné přes `https://services.csbot.cz/apps/csob/...`. ### Meta (bez credentials) - `GET /health` – liveness - `GET /version` – název/verze + API info - `GET /status` – ne-secret konfigurace (base/oauth URL, timeout) - `GET /docs` – Swagger UI - `GET /docs/v1/swagger.json` – OpenAPI dokument ### OAuth2 - `GET /oauth/authorization-url` – sestaví authorize URL pro přesměrování PSU - `POST /oauth/token` – výměna `code` → access/refresh token (mTLS) - `POST /oauth/refresh` – obnova access tokenu (mTLS) ### AISP – účty - `GET /accounts` - `GET /accounts/{id}/balance` - `GET /accounts/{id}/transactions` - `GET /accounts/{id}/transactions/awaiting` - `GET /accounts/{id}/standing-orders` - `GET /accounts/{id}/standing-orders/{standingOrderId}` - `GET /accounts/{id}/direct-debits` ### PISP – platby / trvalé příkazy / inkasa Pro každou agendu: `POST` (iniciace), `GET /{id}` (detail), `GET /{id}/status`, `DELETE /{id}` (zrušení), a sign/SCA flow `POST|GET|PUT /{id}/sign/{signId}`. - `/payments` - `/standing-orders` - `/direct-debits` ### Consents - `POST /consents`, `GET /consents/{id}`, `DELETE /consents/{id}` ## Credential hlavičky (per-request, jen přes TLS) | Hlavička | Význam | Předáno do ČSOB jako | |---|---|---| | `X-CSOB-Certificate` | eIDAS klientský certifikát (QWAC), **Base64 PFX/PKCS#12** vč. privátního klíče a chainu | mutual TLS | | `X-CSOB-Certificate-Password` | heslo k PFX (volitelné) | – | | `X-Access-Token` | OAuth2 Bearer access token PSU (AISP/PISP/consents) | `Authorization: Bearer` | | `X-API-Key` | ČSOB application API key | `APIKEY` | | `X-TPP-Name` | název TPP organizace | `TPP-Name` | | `X-CSOB-Client-Id` / `X-CSOB-Client-Secret` | OAuth2 app credentials (jen `/oauth/*`) | OAuth form | | `X-User-Involved`, `X-User-IP-Address` | volitelný PSU kontext | `User-Involved`, `User-IP-Address` | Hlavičky `X-Request-ID` a `Date` generuje služba automaticky. ## Konfigurace (environment variables – pouze ne-secret) | Proměnná | Default | |---|---| | `APP_NAME` | `ČSOB PSD2 Service` | | `APP_VERSION` | `1.0.0` | | `ROOT_PATH` | (prázdné; AppFactory nastaví `/apps/csob`) | | `CSOB_API_BASE_URL` | `https://api.csob.cz/api/csob/psd2/v1` | | `CSOB_OAUTH_AUTHORIZE_URL` | `https://identita.csob.cz/mep/fs/fl/oauth2/auth` | | `CSOB_OAUTH_TOKEN_URL` | `https://api.csob.cz/api/csob/oauth2/v1/token` | | `CSOB_REQUEST_TIMEOUT_SECONDS` | `100` | > **Žádné secrets v env.** Certifikát, client id/secret, access token a APIKEY jdou výhradně per-request hlavičkami. ## Lokální spuštění ```bash dotnet run --project Csob.csproj # nebo ROOT_PATH=/apps/csob ASPNETCORE_URLS=http://0.0.0.0:8080 dotnet run ``` Podrobnosti k OAuth/SCA flow a kompletní seznam endpointů viz [documentation/](documentation/).