Przygotowanie skryptu do tego aby móc go dodać jako aplikację indywidualną do panelu administracyjnego

Aby ułatwić Ci dodanie Twojego własnego rozwiązania do panelu IdoSell Shop, przygotowaliśmy dla Ciebie instrukcję z przykładową aplikacją oraz bibliotekę pomocniczą.

1. Kontrola dostępu

Uwierzytelnianie odbywa się poprzez OAuth 2.0. Aplikacja indywidualna może wykonać uwierzytelnianie na dwa sposoby:

  • kodem autoryzacyjnym (authorization code grant) podczas pierwszego logowania
  • token odświeżający (refresh token grant) w przypadku wygaśnięcia ważności tokenu dostępowego

Potrzebne adresy:

Obsługiwane zakresy dostępu (scope)
*openid - login zalogowanego użytkownika
*profile - dane zalogowanego użytkownika
*email - email zalogowanego użytkownika
*api-pa - wymagany jeżeli aplikacja wywołuje API Panelu administracyjnego

2. Dostęp do API Panelu administracyjnego z aplikacji indywidualnej

Po poprawnym uwierzytelnieniu w panelu aplikacja indywidualna zyskuje możliwość dostępu do API Panelu administracyjnego, przy czym autoryzacja poszczególnych wywołań bramek może zostać wykonana na dwa sposoby:

  • poprzez umieszczenie w żądaniu wywołania API nagłówka HTTP Authorization: Bearer access_token gdzie access_token jest tokenem uzyskanym w procesie autentykacji. Należy przy tym pamiętać o wysłaniu danych do logowania API czyli userLogin oraz authenticateKey nie uzupełnionych
  • poprzez podanie w danych do logowania userLogin='oauth_authorization' i authenticateKey=otrzymany_token_dostępowy
  • wywołania API panelu muszą odbywać się w komunikacji szyfrowanej https

3. SDK do stworzenia aplikacji indywidualnej

3.1 Przykład Hello World


<?php

require_once __DIR__ . '/autoload.php';

use IAI\Authorization\OpenIdClient;
use IAI\Authorization\Oauth2Client;

session_start();

// ---------- Application init ----------
$applicationState = new ApplicationState(); //implementation of IAI\Application\StateInterface
$keyStorage = new KeyStorage(); //implementation of IAI\Application\PublicKeyStorageInterface

/**
 * ENTER YOUR APPLICATION'S CONFIGURATION BELOW
 */
$applicationConfig = (new \IAI\Application\Config())
    ->setPanelTechnicalDomain('panel.technical.domain')
    ->setId('client_id')
    ->setSecret('client_secret')
    ->setRedirectUri('localhost/index.php');
// --------------------------------------

// ---------- Logging in, checking session, refreshing tokens etc. ----------
try {
    if (!$applicationState->isLoggedIn()) {

        //Using OpenID Connect authentication server to log in
        $client = new OpenIdClient($applicationConfig, $keyStorage, $applicationState);

        if (empty($_GET['code']) && empty($_GET['state'])) {
            //no authorization code, no application state - first step of authentication - get the authorization code
            $client->startAuthentication();
        }

        //got (or should have) authorization code and application state - exchange authorization code for access token
        $token = $client->finalizeAuthentication($_GET['code'], $_GET['state']);

        //save received token in session
        $applicationState->setToken($token);

        //get logged in user details and save them in session
        $user = $token->getIdToken()->getClaim('profile', false);
        if ($user === false) {
            throw new Exception('Couldn\'t log in');
        }
        $applicationState->setUser($user);
    }

    if ($applicationState->hasToRefreshToken()) {
        //logged in, but have old authorization token - need to refresh token
        $client = new Oauth2Client($applicationConfig, $keyStorage);
        $applicationState->setToken(
$client->refreshToken($applicationState->getToken())
        );
    }
} catch (Exception $e) {
    die('Error while getting access: ' . $e->getMessage());
}

// ------------------------------ Application "view" ------------------------------

$cssHref = ((new IAI\Application\Resources($applicationConfig))->getStyleSheetUrl());
$userName = $applicationState->getUser()->name;
$userPreferredName = $applicationState->getUser()->preferred_username;

?>

<html>
    <head>
        '; ?>
    </head>
    <body>
        Hello {$userName} ({$userPreferredName})!"; ?>
    </body>
</html>

3.2 Potrzebujesz bardziej zaawansowanego przykładu ?

  • pobierz bibliotekę IAI zawierającą gotowe klasy pomocne w obsłudze autoryzacji IAI OAuth Library
  • pobierz przykładową aplikację indywidualną exampleApplication, w której zaimplementowaliśmy wywołanie API panelu administracyjnego oraz przykład budowania formularza z danymi.
  • pobierz przykładowy formularz dodawania klienta sklepu Formularz dodawania klienta (pamiętając o zmianie w nagłówku pliku adresów arkuszy CSS na odpowiednie dla Twojej domeny)

4. Aplikacja indywidualna jest gotowa

Aby użytkownicy mogli korzystać z Twojego aplikacji wystarczy że dodasz ją do panelu.