Modul: Single Sign-On (SSO)

Für eine nahtlose und möglichst direkte Einbindung in einen beliebigen Druckshop aus externen Systemen bietet der Druckshop mit dem SSO-Modul die Möglichkeit, einen Benutzer direkt zu registrieren und anzumelden, ohne dass dieser eine eigene Registrierung vornehmen muss. Hierzu muss lediglich das Modul konfiguriert werden und eine Anbindung programmiert werden.

Konfiguration des Moduls

Pro Shop kann eine individuelle Konfiguration angelegt werden, wobei folgende Optionen zur Verfügung stehen:

Schnittstelle aktivierenDie SSO-Schnittstelle kann für jeden Shop einzeln aktiviert und deaktiviert werden.

Verschlüsselungspasswort

Ein möglichst sicheres Passwort, das zur Ver- und Entschlüsselung der übertragenen Informationen dient.
Kommunikationsstatus
E-Mail
Zahlungsart

Soll bei einem SSO-Login eine bestimmte Zahlungsart verwendet werden, kann diese hier hinterlegt werden.

Wird keine Zahlungsart vorgegeben, stehen alle verfügbaren Zahlungsarten im Shop bereit.

Anbindung aus einem externen System

Um den direkten Login per SSO zu ermöglichen, muss das externe System die erforderlichen Benutzerdaten verschlüsselt übergeben. Hierzu wird das symmetrische Verschlüsselungsverfahren AES-256-CBC verwendet, um eine zuverlässige Verschlüsselung sicherzustellen. Grundsätzlich können folgende Daten übergeben werden:

user

Alle verfügbaren Benutzerdaten können übergeben werden. Diese werden zur Erstellung und Aktualisierung der Benutzerdaten im Druckshop verwendet.

userName *Benutzername des neuen oder existierenden Benutzers.
password *Passwort des neuen Benutzers (dieses wird vom Druckshop verschlüsselt).
customerNumberKundennummer
status

Status des Benutzers (beispielsweise "OK").

ssoLoginOnlyErlaubt dem Benutzer ausschließlich einen Login per SSO. Dieser Parameter kann dazu verwendet werden, um einen direkten Login über das Shop-System zu unterbinden. (1 oder 0)

Es stehen alle weiteren Felder eines Kundenbenutzers zur Verfügung und werden im Druckshop aktualisiert, sofern sie übergeben werden.

redirect_uriZiel-Adresse, auf die bei erfolgreichem Login weitergeleitet werden soll (i. d. R. ist dies die Startseite des Shops: "/").
callback_uriZiel-Adresse, auf die nach Bestellabschluss zurückgeleitet werden soll.
logout_uriZiel-Adresse, auf die nach Logout zurückgeleitet werden soll.
error_uriZiel-Adresse, auf die nach erfolglosem Login zurückgeleitet werden soll.
Beispielhafte Implementierung über PHP
$newShopCustomer = new Customer();
$newShopCustomer->userName = 'max.mustermann';
$newShopCustomer->password = 'supersecurepasswordforuser1234';
$newShopCustomer->status = 'OK';
$newShopCustomer->ssoLoginOnly = 1;

$ssoData = [
    'user' => $newShopCustomer,
    'redirect_uri' => '/',
    'callback_uri' => 'https://my.sytem.dev/sso_callback.php',
    'logout_uri' => 'https://my.system.dev/sso_logout.php',
    'error_uri' => 'https://my.system.dev/sso_login_failed.php'
];

// Encrypt ssoData
$cipher = 'AES-256-CBC';


$ssoPassword = 'ssoPasswordFromModuleSettings'; // Hier muss das hinterlegte Passwort aus den Moduleinstellungen angegeben werden


if (in_array($cipher, openssl_get_cipher_methods())) {
    $cipherInitializationVector = substr(
    	hash(
     		'sha256',
    		$ssoPassword
    	),
    	0,
    	openssl_cipher_iv_length($cipher)
	);

    $encodedDataString = openssl_encrypt(
        http_build_query($ssoData),
        $cipher,
        $ssoPassword,
        0,
        $cipherInitializationVector
    );


	$ssoLoginUri = 'http://www.shop.printshop.local/sso/login?data=' . rawurlencode($encodedDataString);
} else {
	exit('encoding not available.');
}

Verifizierung eines Benutzerzugriffs

Um einen Benutzerzugriff durch ein externes System zu verifizieren, kann zusätzlich das Modul "SSO Verifizierung" aktiviert werden.

Ist das Modul aktiviert, steht innerhalb der Verwaltung im Bereich "Addons » SSO Verifizierung" die Konfiguration für jeden Shop zur Verfügung, in der eine Verifizierungs-URL hinterlegt werden kann. Diese wird mit den Parametern user und user-id aufgerufen. Als Rückgabe wird ein JSON-Objekt erwartet mit folgenden Eigenschaften:

{
"user-id":"", // Bei erfolgreicher Prüfung wird hier die Benutzer-Kennung zurückgegeben
"hook_url":"" // Optionale URL für den Rücksprung
}