AuthorizationService/de

From OpenSimulator

Revision as of 03:56, 12 October 2018 by Manni (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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();
?>
Personal tools
General
About This Wiki