XML-RPC v podani Zope je velmi zajimave, ale dost by me zajimala otazka bezpecnosti: jak je vlastne mozne dosahnout, aby XML-RPC server vedel, kdo spousti metodu a tim tedy, zda ma ten dotycny klient pravo na spusteni teto metody? Jak se provadi autentikace v tomto systemu?
Honza
Samotné spojení je možné provést i s udáním uživatelského jména a hesla. Používá se pro to tzv. transportní vrtsva Basic Authentisation. Autorizace je obdobná, jako byste přistupovali přes HTTP. No a co se ZOPE serveru týče, tak ten má systém přístupových práv implementován nativně v sobě. Tzn. každému objektu v ZOPE databázi se přiřazují práva, kdo může co s daným objektem dělat. Objektem je míněna nějaká akce, ale i třeba obyčejná stránka.
Abych byl něco konkrétnejší. Na adrese http://cvs.zope.org/Products/Scheduler/BasicAuthTransport.py si můžete stáhnout podpurnou knihovnu. Priklad pouziti by mohl vypadat takto:
from BasicAuthTransport import BasicAuthTransport
import xmlrpclib
bat = BasicAuthTransport(username='user1', password='heslo')
s = xmlrpclib.Server('http://yourserver:8080/', bat)
s.volani_sluzby()
Bezpečnost si můžete udělat buď na vrstvě XML-RPC sami
(do parametrů funcí si můžete dát např. jméno a heslo
a na straně servru to pak kontrolovat).
Nebo použít nějakou moužnost na úrovni HTTP protokoulu.
1. Auth Basic (tuším že jsem to viděl v některé z
implementací v PHP)
2. SSL - pokud to podporuje implementace. V PHP
jsem viděl v xmlrpc.inc volání curl, ale netestoval
jsem to. Pokud to implementace neumožňuje, dá se
použít stunnel (http://www.stunnel.org) a v něm
se dají použít třeba i klientské certifikáty.
3. Nějaký svůj "bastl". Třeba dát někam do hlavičky
HTTP requestu kontrolní součty z body requestu.