Aus EnzyklopAtys
Benutzerauthentifizierung für in AppZone registrierte Anwendungen
Verwendung
- URL-Werte
user
-- base64 kodiertes php serialisiertes Arraychecksum
-- sha1 hash_hmac mit geheimem App-Schlüssel aus AppZone
Aufgrund von php serialize muss die Prüfsumme validiert werden, bevor der Benutzerwert sicher verwendet werden kann.
Eine validierende Prüfsumme bietet auch eine starke Garantie dafür, daß der Benutzer derjenige ist, der er vorgibt zu sein.
Beispiel, wie die Rückmeldung erstellt wird:
$userArray = [
'timestamp' => "0.9696200 1503915319",
'app_url' => 'http://...',
'id' => "1",
'char_name' => 'Spieler',
'race' => 'Tryker',
'cult' => 'Neutral',
'civ' => 'Neutral',
'organization' => 'Marodeur',
'guild_id' => '105906000',
'guild_icon' => '17',
'guild_name' => 'Gilde',
'grade' => 'Anführer',
'lang' => 'de'
];
$user = base64_encode(serialize($userArray));
$checksum = hash_hmac('sha1', $user, $appKey);
timestamp
enthält Mikrosekunden und Sekunden, in denen die Antwort erstellt wurde, und sollte überprüft werden, um zu verhindern, dass dieselbe Antwort mehrfach wiedergegeben wird.
app_url
muss aktiviert werden, um zu verhindern, dass dieselbe AppZone-Antwort in anderen Anwendungen verwendet wird.
PHP-Interface
ryzom_app_authenticate(&$user)
Diese Funktion überprüft die AppZone-Benutzer- und -Prüfsummen-URL-Parameter. Verwendet $_GET['user'] und $_GET['checksum'] direkt.
Die Funktion gibt bei Erfolg den booleschen Wert true zurück. Die Variable $user enthält Informationen von AppZone oder eine Fehlermeldung, wenn ein Fehler aufgetreten ist.
$_SESSION['app.user']
|
ist für künftige Anfragen gesetzt. PHP-Sitzung ist erforderlich. |
- Konstanten welche definiert sein sollten :
RYAPI_AUTH_KEY
- geheimer Schlüssel in der AppZone
- wenn leer, dann werden die Benutzerdaten nicht überprüft (nicht empfohlen)
RYAPI_APP_URL
- App-Url in der AppZone
- wenn leer, dann wird automatisch die am besten ermittelte Url verwendet
- wenn false, dann wird die Anwendungs-Url nicht verifiziert
RYAPI_APP_MAXAGE
- Höchstalter in Sekunden für die Gültigkeit der AppZone-Url
- wenn 0, wird der Zeitstempel (timestamp) nicht verifiziert
<?php
require_once "ryzomapi_lite.php";
define('RYAPI_AUTH_KEY', 'secret-key');
define('RYAPI_APP_URL', 'http://app.url/');
define('RYAPI_APP_MAXAGE', 30);
session_start();
$user = false;
if (ryzom_app_authenticate($user)) {
$charName = htmlspecialchars($user['char_name']);
echo "Hallo {$charName}!";
} else {
$error = htmlspecialchars($user);
echo "Autentifizierungs-Fehler ({$error}).";
}