SimpleXMLRPCServer & Autenticação
- Posted by acidx on October 14th, 2005 filed in geek
- Comment now »
As funções abaixo podem ser utilizadas para obter o usuário e senha enviadas para um servidor criado com o SimpleXMLRPCServer do Python. Em uma classe derivada do SimpleXMLRPCRequestHandler, você pode fazer isso no método _dispatch, ou em cada método em particular, de acordo com sua necessidade.
A função getHeaders é genérica o suficiente para obter, como um dicionário, os headers de uma conexão HTTP. A getUserAndPassword usa a getHeaders para obter o header Authorization, verificar se o método de autenticação é Basic e, finalmente, decodificar o usuário e senha (usando o base64).
Isso está funcionando bem em um pequeno projeto (e eu sei que falta um pouco de tratamento de exceções ali, não estou preocupado com isso agora), mas não sei se é a maneira correta de fazer.
Por exemplo: se eu uso o módulo xmlrpclib, mais especificamente o ServerProxy, eu posso passar o usuário e senha pela URL (http://usuário:senha@host/…), que o módulo faz a autenticação por debaixo dos panos. No servidor, entretanto, não achei nada “pronto”, e achei um bocado estranho. Alguém tem idéia se há maneira mais “limpa” de se fazer isso?
from base64 import decodestring
def getHeaders(hdr):
headers = {}
for header in str(hdr).split("\n"):
try:
idx = header.index(":")
name, content = header[:idx], header[idx+2:]
headers[name] = content
except:
return headers
return headers
def getUserAndPassword(headers):
headers = getHeaders(headers)
if not headers.has_key("Authorization"):
raise AccessDenied
auth = headers["Authorization"]
if auth[:5] != "Basic":
raise BadMethod
return decodestring(auth[6:]).split(":")












Leave a Comment