Przygotowanie własnej bramki AJAX aby móc ją wykorzystać w swoim sklepie IdoSell Shop

Aby ułatwić Ci tworzenie własnych bramek AJAX wykorzystywanych na potrzeby swoich sklepów IdoSell Shop, przygotowaliśmy dla Ciebie instrukcję z przykładową bramką oraz bibliotekę wspomagająca ich autoryzację.

1. Jak stworzyć właną bramkę AJAX?

Krótki poradnik dla developera

  1. Pobierz kod przykładowej bramki AJAX exampleAjaxGate (wykorzystującej mechanizm autoryzacji poprzez token JWT),
  2. Przygotuj w tworzonej bramce obsługę scenariuszy błędów nieudanej autoryzacji,
  3. Połącz się z API Panelu administracyjnego, by pobrać dane potrzebne dla zalogowanego użytkownika (login aktualnie zalogowanego użytkownika możesz wziąć z ciastka "login"),
  4. Otrzymane z wywołanej bramki API Panelu administracyjnego dane zabezpiecz wykorzystując mechanizm tokena JWT i zwróć w postaci JSON-a do template swojego sklepu IdoSell Shop,
  5. Gotową bramkę podepnij w customizowanym kodzie HTML template swojego sklepu IdoSell Shop. O ile użyłeś kodu naszej przykładowej bramki musisz w jej adresie wysłać dwa parametry: token JWT (otrzymany ze zmiennej clientSecurityToken, o której dowiesz sie więcej z opisu poniżej) oraz login klienta.

2. Dostęp do bramek AJAX ze sklepu IdoSell Shop

Po zalogowaniu się klienta do sklepu, w kodzie JS template sklepu pod zmienną clientSecurityToken dostępny jest token autoryzacyjny dla bramek AJAX zapisany w standardzie JWT (JSON Web Token). Token ten posiada zaszyte dane identyfikujące klienta dzięki czemu, gdy bramka AJAX otrzyma go razem z loginem klienta w żądaniu, to jest w stanie zweryfikować::

  • czy żądanie pochodzi rzeczywiście od sklepu, na którym klient jest zalogowany,
  • czy klient, dla którego dane ma zwrócić bramka, jest tym który jest faktycznie zalogowany.

Dzięki temu pomimo separacji środowiska pracy sklepu oraz bramki AJAX możliwe jest przeprowadzenie autoryzacji dostępu do potrzebnych dla wybranego klienta danych i pobranie ich poprzez wykonanie dalszych zapytań do API Panelu administracyjnego.

Krótko o standardzie JWT

JWT (JSON Web Tokens) to bezpieczny sposób wymiany danych między dwiema stronami (używany często przy autoryzacji), który został zdefiniowany w otwartym standardzie RFC 7519. Dane przesyłane są w postaci obiektu JSON, a każdy token jest podpisany cyfrowo odpowiednią sygnaturą, która jest również jego integralną składową.

W IdoSell wykorzystujemy do podpisywania tokenów algorytm RS256 (RSA z sygnaturą SHA-256).

Struktura tokenu:

Każdy JWT (a więc także clientSecurityToken) składa się z trzech części oddzielonych kropkami i zakodowanych algorytmem base64:

  • nagłówka, czyli części zawierającej informacje o typie użytego tokena (typ: JWT), rodzaju użytego algorytmu szyfrującego (alg: RS256) oraz unikalnym inentyfikatorze użytego tokena (jti),
  • ładunku, czyli części zawierającej informacje o samym tokenie jak i użytkowniku którego dotyczy, między innymi:
    • kiedy token został wygenerowany (iat: timestamp)
    • od kiedy token jest ważny (nbf: timestamp)
    • do kiedy dany token jest ważny (exp: timestamp [max 30 minut od momentu wygenerowania]),
    • dane klienta (clientData) w tym: identyfikator klienta do którego użyty token się odnosi (clientData.id) oraz jego login (clientData.login)
  • podpisu, czyli części która umożliwia weryfikację prawdziwości tokena (czy token po drodze od klienta do serwera nie został zmodyfikowany)

Więcej informacji o standardzie można znaleźć pod linkami:

3. SDK do stworzenia i autoryzacji własnej bramki AJAX

3.1 Przykład bramki AJAX wykorzystującej autoryzację poprzez token JWT

<?php

require_once __DIR__ . '/autoload.php';

/**
 * ENTER YOUR APPLICATION'S CONFIGURATION BELOW
 * ENTER YOUR APPLICATION'S CONFIGURATION BELOW
 * ENTER YOUR APPLICATION'S CONFIGURATION BELOW
 */
$applicationConfig = (new \IAI\Application\BasicConfig())
    ->setPanelTechnicalDomain('panel.technical.domain');

$keyStorage = new KeyStorage();

$token = $_GET['token'];
$clientLogin = $_GET['login'];

$response = [
    'authorized' => false,
    'error' => ''
];

$ClientTokenVerifier = new \IAI\Authorization\ClientTokenVerifier($applicationConfig, $keyStorage);
try {
    $clientData = $ClientTokenVerifier->verifyClientToken($token);
    if ($clientData->login !== $clientLogin) {
        $response['error'] = 'Login incorrect';
    } else {
        $response['authorized'] = true;
    }
} catch (Exception $e) {
    $response['error'] = $e->getMessage();
}

if (!$response['authorized']) {
    die(json_encode($response));
}

//do necessary stuff
//do necessary stuff
//do necessary stuff

die(json_encode($response));

3.2 Potrzebujesz bardziej zaawansowanego przykładu ?

  • pobierz bibliotekę IdoSell Security zawierającą gotowe klasy pomocne w obsłudze autoryzacji IdoSell Security Library
  • pobierz przykładową bramkę AJAX exampleAjaxGate, w której zaimplementowaliśmy mechanizm autoryzacji wykorzystujacy token JWT