Authentication¶
Autentykacja requestów odbywa się przez HTTP Authorization header z wykorzystaniem API key, który jest konfigurowany w panelu merchanta. W tym headerze podpis HMAC jest zakodowany według następujacego schematu:
Authorization: hmac <version>$<api-key>$<method>$<URL-path>$<timestamp>$<nonce>
x-app-signature: <signature>
Przykład:
authorization: hmac v1$b23a9fa61406440d868271d19d634906$GET$/MERCHANT/ORDER/STATUS$1678206688075$AB1CSA86767CVSJKLN878AS
x-app-signature: UTgPOhKP2Uqgt8K3gNwnLZvJVcN8Pxxui4z3g3pft+A=
Info
Mimo, że nagłówki HTTP są niewrażliwe na wielkość liter zgodnie ze standardem HTTP, nagłówki są wrażliwe na wielkość liter i powinny używać małych liter (lowercase header name).
Wyliczenie HMAC dla requestów¶
Integralność każdej wiadomości jest chroniona przez dodanie HMAC do każdego requestu i odpowiedzi. Sposób wyliczenia HMAC dla requestu jest następujący:
-
Zbuduj wartość wejściową dla generacji HMAC przez konkatenację poniższych elementów przy użyciu
$
jako ogranicznika:api-key
: twój klucz API dostarczony przez OpenAppmethod
: metoda requestu wielkimi literami (GET
,POST
,PUT
,PATCH
,DELETE
)path
information: muszą być wielkimi literami (na przykład/MERCHANT/ORDER/STATUS
)timestamp
: Unix timestamp (epoch) w milisekundach (requesty są ważne do 60 sekund od timestampu)nonce
: randomowy unikalny string dla requestu, na przykład UUID v4, który może być wykorzystany do replay protection. Maksymalna długość to 64 znaki.content
: Base64 encoded SHA256 hash treści requestu, lub nic jeśli request nie ma treści
-
Wynikiem jest string podobny do poniższego dla requestu GET bez treści:
Lub w przypadku requestu POST z treścią: -
Użyj API key i API Secret dostarczony przez OpenApp.
-
Oblicz HMAC stringu z kroku 2, korzystając z klucza API Secret udostępnionego przez OpenApp i algorytmu SHA-256 z kodowaniem utf-8.
-
Base64 koduje wynik funkcji HMAC.
Dane wejściowe (z wyjątkiem SHA256 treści, ponieważ treść znajduje się w innym miejscu requestu) są umieszczane w nagłówku authorization
, a podpis jest umieszczany w nagłówku x-app-signature
:
authorization: hmac v1$<API key>$<request method>$<path uppercase>$<timestamp>$<nonce>
x-app-signature: <calculated signature>
Jest wysoce zalecane, aby wdrożyć walidację request signatures w requestach przychodzących, aby zweryfikować, że pochodzą one rzeczywiście od OpenApp.
Kalkulacja HMAC dla odpowiedzi¶
Odpowiedź string-to-sign jest skonkatonowanym stringiem generowanym z nastąpujących elementów:
nonce
który był wysłany w Authorization header requestu;timestamp
który był wysłany w Authorization header requestu;- Zhaszowany SHA256 z wykorzystaniem Base64 treści wiadomości, lub nic jeśli request nie ma treści
-
To tworzy string podobny do poniższego w przypadku odpowiedzi bez treści:
-
Ten string do podpisu jest podpisywany z wykorzystaniem HMAC-SHA256 i secret key, a wynikowy podpis jest umieszczany w
x-server-authorization
header:
API OpenApp API weryfikuje ten podpis, więc jest on obowiązkowy.
Przykłady¶
Zakładając, że API Key to a6ae5908051a4b599202154b5b3541e3
a secret to 5814d9bd75ea42349483ac74266d24bc834656d743244653ba2dcc8519eed695
GET request¶
Ten przykład pokazuje kalkulację requestu GET dla endpointu {{baseUrl}}/merchant/order/status
z JSON response.
Podpis requestu¶
- Parametry wsadowe dla stringu do podpisu są następujące:
- HTTP method
GET
- Ścieżka endpointu wielkimi literami
/MERCHANT/ORDER/STATUS
- Timestamp to
1678206688075
- Randomowy nonce to
AB1CSA86767CVSJKLN878AS
. - Ponieważ request nie ma treści, nie ma hasza treści dla podpisu.
- HTTP method
- String do podpisu to:
- Wyliczony podpis w Base64 to:
K/WpW/u2PRDdVPp21i1tzhs1Dmf7dUooCIkJwfCjjOw=
- Header autoryzacyjny ma wartość:
Podpis odpowiedzi¶
Odpowiedź z serwera zawiera treść z danymi. Dane te są zakodowane w JSON i konieczne jest wygenerowanie SHA 256 hadh po serializacji do JSON:
- Input dla podpisu to:
- Nonce z request
AB1CSA86767CVSJKLN878AS
- Timestamp z requestu
1678206688075
- SHA-256 hash body odpowiedzi zakodowany Base64
eekP9w+TMbSUd0BnePPiT3A/DIr151xP6219xGvxpZ8=
- Nonce z request
- String do podpisu dla odpowiedzi hmac to:
- Podpis wyliczony z kodowaniem Base64 to:
saOtyZVgcsDph3++lHfj/EzMxQOfE8UYKXisr6DdESw=
- Header
x-server-authorization
odpowiedź serwera ma wartość
Request POST¶
Poniższy przykład pokazuje kalkulację requestu POST dla endpointu {{baseUrl}}/v1/orders/fulfillment
z pustą odpowiedzią.
Podpis requestu¶
- Parametry wsadowe do stringu do podpisu to:
- Metoda HTTP
POST
- Scieżka enpointu wielkimi literami
/V1/ORDERS/FULFULLMENT
- Timestamp to
1678206688075
- Randomowy nonce to
K0LPP2AAM8XIY964W2
. - Treść wiadomości
Hasz SHA-256 z body requestu:
- Metoda HTTP
- String do podpisu to:
- Podpis wyliczony z Base64 to:
L0ipqXrr9HpQoXPwzgDRSNnJKRnnZZ58oJ0FayN5ips=
- Header
authorization
ma wartość:
Podpis odpowiedzi¶
Odpowiedź z serwera nie zawiera treści.
- Wsadowe do podpisu są więc następujące:
- Nonce z requestu
AB1CSA86767CVSJKLN878AS
- Timestamp z requestu
1678206688075
- Brak treści
- Nonce z requestu
- String do podpisu odpowiedzi hmac to:
v1$1678206688075$AB1CSA86767CVSJKLN878AS
- Wyliczony podpis z kodowaniem Base64 to:
EQ4RqNLDmtVO1xgJlyQSI1h0ZfYvOjozyhyGHjiMqrM=
- Header
x-server-authorization
odpowiedzi ma wartość
Konfiguracja sieci¶
Jeśli konieczna jest konfiguracja sieci, aby pozwolić na dostęp z OpenApp, należy skonfigurować następujące adresy IP, z których OpenApp będzie łączyć się z Twoją infrastrukturą:
- 3.125.75.87
- 3.70.34.35
- 3.72.153.100
- 3.72.163.248
Testowanie autentykacji¶
Po zakończeniu implementacji wyliczania swojego HMAC, koniecznie ją przetestuj.
OpenApp udostępnia 2 testowe endpointy, które możesz wykorzystać do weryfikacji poprawności podpisów HMAC. Wymagają one odpowiednich requestów autoryzacyjnych i zwracają headery x-server-authorization.
Request GET¶
Wyślij swój request na GET {{OpenAppUrl}}merchant/v1/test
Request POST¶
Wyślij swój request na POST {{OpenAppUrl}}merchant/v1/test
Możesz dołączyć dowolną treść, na przykład: