AuthorizationService/de
From OpenSimulator
Der Autorisierungsdienst ist derzeit nur ein Skelett, das später erweitert werden soll. Im Grid-Modus kann er jedoch zur Kommunikation mit einem externen Autorisierungsdienst verwendet werden.
Configuration
Um Ihre Region auf einen externen Autorisierungsdienst zu verweisen, bearbeiten Sie die Datei
opensim/bin/config-include/GridCommon.ini
Fügen Sie einen Abschnitt wie den folgenden hinzu, und ändern Sie den URI so, dass er auf Ihren Autorisierungsserver verweist
[AuthorizationService] ; ; Ändern Sie dies in Ihrem grid-wide Autorisierungsserver. ; AuthorizationServerURI = "http://localhost/auth.php"
Nachrichtenformate
Wenn ein Benutzer versucht, eine Region einzugeben, wird ein HTTP-POST an die AuthorizationServerURI gesendet, die Sie in der Konfiguration angegeben haben. Der Hauptteil des POST ist ein XML-serialisiertes AuthorizationRequest-Objekt.
Beispiel
<?xml version="1.0" encoding="utf-8"?> <AuthorizationRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ID>decc5198-9de2-11de-be89-00145eecaa9a</ID> <FirstName>Rob</FirstName> <SurName>Smart</SurName> <Email>user@host.com</Email> <RegionName>test region</RegionName> <RegionID>e276e142-a099-4d6d-8f2d-0aad91ede958</RegionID> </AuthorizationRequest>
Der Autorisierungsdienst muss mit einer XML-Nachricht antworten, die mit einem XML-serialisierten AuthorizationResponse-Objekt übereinstimmt.
Beispiel
<?xml version="1.0" encoding="utf-8"?> <AuthorizationResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <IsAuthorized>true</IsAuthorized> <Message>Rob Smart has been authorized for the region test region.</Message> </AuthorizationResponse>
Das IsAuthorized Element muss entweder die Zeichenfolge True oder die Zeichenfolge False enthalten . Das Nachrichtenelement kann eine beliebige Zeichenfolge enthalten. In diesem Moment wird diese Nachricht nur in der OpenSimulator-Regionenkonsole angezeigt.
Beispiel PHP
Ein einfaches PHP-Beispiel zum Parsen der Autorisierungs-XML und zur Antwort.
<?php class AuthorizationResponse { private $m_isAuthorized; private $m_message; public function AuthorizationResponse($isAuthorized,$message) { $this->m_isAuthorized = $isAuthorized; $this->m_message = $message; } public function toXML() { return '<?xml version="1.0" encoding="utf-8"?><AuthorizationResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><IsAuthorized>'. $this->m_isAuthorized .'</IsAuthorized><Message>'. $this->m_message .'</Message></AuthorizationResponse>'; } } class AuthorizationRequest { private $m_isAuthorized; private $m_message; public $ID; public $FirstName; public $SurName; public $Email; public $RegionName; public $RegionID; public function parseRequest($request) { $reader = new XMLReader(); $reader->XML($request); while ($reader->read()) { if ($reader->nodeType == XMLReader::ELEMENT) { switch($reader->name) { case 'AuthorizationRequest': // $log->write("AuthorizationRequest element"); break; case 'ID': $reader->read(); $this->ID = $reader->value; break; case 'FirstName': $reader->read(); $this->FirstName = $reader->value; break; case 'SurName': $reader->read(); $this->SurName = $reader->value; break; case 'Email': $reader->read(); $this->Email = $reader->value; break; case 'RegionName': $reader->read(); $this->RegionName = $reader->value; break; case 'RegionID': $reader->read(); $this->RegionID = $reader->value; break; } } } } } $request = @file_get_contents('php://input'); $authReq = new AuthorizationRequest(); $authReq->parseRequest($request); $authResp = new AuthorizationResponse("true", "You are authorized"); echo $authResp->toXML(); ?>