Skip to main content

Zapisanie dostępu

  1. Użytkownik Systemu Klienta wybiera Dostawcę (np. Orange) i podaje login i hasło, którymi loguje się do Systemu Dostawcy (https://www.orange.pl/zaloguj.phtml)
  2. System Klienta przekazuje te dane do BillTech API - tworzy nowe Konto.
  3. BillTech API bezpiecznie zapisuje dane uwierzytelniające i w odpowiedzi zwraca identyfikator Konta.
  4. System Klienta zapisuje identyfikator Konta.
  5. Następuje pierwsza Synchronizacja Danych. W tym czasie użytkownik może czekać na potwierdzenie poprawności danych uwierzytelniających.
  6. Jeśli dane uwierzytelniające były poprawne i udało się pobrać Opłaty, System Klienta powinien je zapisać w swoim systemie w celu prezentacji tych danych użytkownikowi.

alt text

Utworzenie konta#

Request
POST /api/accounts HTTP/1.1
Host: <api_host>
Content-Type: application/json
Authorization: Bearer <auth_token>
{
"principal": "login",
"secret": "hasło",
"billerId": "UPC",
"consent": true,
"accountType": "DIRECT_SYNC"
}
Response
"b7a2aa1e-c9a2-4ede-bf8d-2913843176d0" // id utworzonego konta

Szyfrowanie hasła po stronie klienta#

W typowym scenariuszu, użytkownik wpisuje dane do logowania w aplikacji web lub mobilnej, następnie te dane przekazywane są do backendu Systemu Klienta i dalej do BillTech API. Po stronie Klienta może pojawić się wymaganie, aby backend Systemu Klienta nigdy nie był "w posiadaniu" niezaszyfrowanego hasła. W takim przypadku możliwe jest zaimplementowanie szyfrowania asymetrycznego w przeglądarce lub aplikacji mobilnej z wykorzystaniem klucza publicznego BillTech API.

Pobranie klucza publicznego#

Request
GET /api/public-key HTTP/1.1
Host: <api_host>
Authorization: Bearer <auth_token>
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6xbMLHDjzFJe+7RMXESs
u0ZDBMU5S5ER8hPy+lCgtBORf/GM7Ep14I1qRxu1VIFV9dWllhRlPGrQMI7+4kDb
2bNU6rdFVvTqwO3/cDX3UGxPZXwCxot9N4emH2Wq/kNsDhBsiOMU+j2INnIj1r2g
wCNZH0EtdTjgzQhHni11+r4SLStEhCfttTt1suqxNjGcd2Q7Bev7i4ZhLtzPiOnn
2dO4PBIeygTaDJBpAKsfLQwHr03xiIzeB41/V5aKMv+6+LS79cFoaZvB/Xgy7xSV
h1O1SllxCyrQd/WhnFYlt4LUOI21y3kg2FoDmLWS9RQw4rrxLYhtXeNfEMG+CmuK
P3WaPDeKlSn75KF1qZ2p6f+Ew5ow01ppnrkrpEoALxp6Ynm3Jtw/+3Ufi8vNcBfd
KzYw9xZ1fTRDkkvTsuG28L1UBvx7Bmb0CMqJ7+IeqDSw3/I/J/cmRiMgbVq98Ore
MuDkhNrRB4zFBp8rCaOGTpAU+cZp92Kt+6jgwg2FKwyKJTyNQGOH1cGW4i3TJIIa
p3SgJc1c9W6wzR90pCio7LVlSClBycA0/GXBgKbMcvGz3hb2JFUFZ1JaZCsmSwnx
yW+yVyMQcV5ZKPYP4tScmmmORYgLUKAiQ6Tb8hoAqITyU7MuuarISnzl8VNbs/Pk
nxFnd5Qf1g6ScAGyNC1LiD8CAwEAAQ==
-----END PUBLIC KEY-----

Szyfrowanie#

Wartość hasła należy zaszyfrować kluczem publicznym wykorzystując algorytm RSA-OAEP. W aplikacji web można wykorzystać do tego skrypt encryption.js

import { encryptWithKey, importPublicKey } from 'encryption.js'
...
const publicKey = await fetch(BASE_URL + '/api/public-key')
.then(response => response.arrayBuffer())
.then(importPublicKey)
const encryptedSecret = await encryptWithKey(secret, publicKey)

Utworzenie konta z zaszyfrowanym hasłem#

Zaszyfrowane hasło należy podać w polu "secret" i dodatkowo ustawić pole "encrypted": true.

Request
POST /api/accounts HTTP/1.1
Host: <api_host>
Content-Type: application/json
Authorization: Bearer <auth_token>
{
"principal": "login",
"secret": "TQdOytI9F6OSLAm1C8WnTt7GKh+IawQyNHGrPNHRimPmZoApWHF3DKiBYQN4oZCRh43cnx1CtwMPJi2EXyEtshCBMadJZuxJN8Lo+auMMtrrKFS4f9eh3MNyn6Bb8q7lq9M1Lr8o8kfA5d1KIHHnS1ZtkAdNkbokEDKtOdVcXzNSznuNZgIUKE+BoqI/Uth2U3NOspLsODgqR4I20xm4uckc2U56ZQwgCcfL6VSSVz7JH4YUrbXNhaDiJVK+vfwlRjy4oRAhZFwgrFLr6TXz1wgSOqUxws/8k7RVBm5zcNEMj0epMQdtlT74orTAKijt+4kcEgqRkdzOw9HiAYQ0SYQK6kseVRF+JANhUCizNBw3puVi9cqx9CNL1WOmT0HqgwAmOmuUQD8wEdwcF5owNigQ1uid6t+rA8fFYe11ogcX1z1t2mayte0y99BzouiHLZYqVxBU9o7sinm27tJJ+lxHZ/UHI33bbpLwo81CPiu1ncfzhETtPi6RssHSR4Mx7JhcnR3UedHeHbdECBbTYk3BE+PMog3F+cNhsqnoAuRh/8sRr5zPAdcsbA+qVoEkN3xkFvBXlE1RG+GXVuzbiGs4cbJ/8Slmcl7diZlwvi8rrg/DQ68hHZpUUnwGlephtWdE7T8IdM8v45+ipzA3XGXrAosR4wsVak0XGKHhpaY=",
"billerId": "UPC",
"consent": true,
"accountType": "DIRECT_SYNC",
"encrypted": true
}