AuthorizationService/de
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();
?>