Passa o nome de usuário do Apache Basic Authentication para cherrypy

6

Eu preciso usar a autenticação básica do apache para parte do meu aplicativo. Eu gostaria de obter o nome de usuário autenticado do apache, mas não consigo encontrar onde acessá-lo. Eu posso ver o nome de usuário no log do apache, então eu sei que ele está lá em algum lugar. Depois que o usuário é autenticado pelo apache, a solicitação é enviada por meio de proxy para um servidor em cache.

Aqui está a seção da minha configuração do vache do apache:

<Location /ical>
  AuthType Basic
  AuthBasicProvider ldap
  AuthName "Example Calendar Login"
  AuthLDAPUrl "ldaps://ldap.example.net/ou=People,dc=example,dc=net?uid"
  Require valid-user

  ProxyPass http://localhost:8082/                                                                                                                                                                                                     
  ProxyPassReverse http://localhost:8082/                                                                                                                                                                                              
  SetEnv proxy-nokeepalive 1
</Location>

O bit de autenticação e proxy do usuário está funcionando bem. Depois que a solicitação for autenticada e enviada para cherrypy, aqui estão os cabeçalhos que eu tenho em cherrypy:

(Pdb) pp cherrypy.request.headers
{'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
 'Accept-Encoding': 'gzip,deflate',
 'Accept-Language': 'en-us,en;q=0.5',
 'Authorization': 'Basic xxxxxxxxxxx',
 'Connection': 'close',
 'Host': 'sub.example.net',
 'If-None-Match': 'e5b0879ce68fcce5b960ce4281c8d706',
 'Remote-Addr': '10.132.32.86',
 'User-Agent': 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.10) Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10',
 'X-Forwarded-For': 'xx.xx.xx.xx, xx.xx.xx.xx',
 'X-Forwarded-Host': 'sub.example.net, sub.example.net',
 'X-Forwarded-Server': 'sub.example.net, sub'}

Alguém pode me ajudar a acessar o nome de usuário da autenticação básica do apache?

    
por adam 21.10.2010 / 17:40

2 respostas

6

Eu adicionei um cabeçalho para passar o usuário autenticado com base no apache.

RewriteEngine On
RewriteCond %{REMOTE_USER} ^(.*)$
RewriteRule ^(.*)$ - [E=R_U:%1]
RequestHeader set X-Remote-User %{R_U}e
    
por 28.11.2012 / 10:48
5

Seu aplicativo cherrypy está recebendo as informações de autenticação básica, já que vemos isso nos cabeçalhos:

'Authorization': 'Basic xxxxxxxxxxxxxxxxxxxxxx==',

Você só precisa:

  1. decodifique a string Base64 'xxxxxxxxxxxxxxxxxxxxxx ==' e
  2. extrai o nome de usuário do nome de usuário decodificado: string de senha.

Como este não é stackoverflow ;) , não vou me incomodar em dar uma implementação exata do python acima, mas você deve começar. A entrada da Wikipedia sobre autenticação de acesso básico é bastante informativa e contém trechos de código em vários idiomas.

(Apenas uma observação de segurança sobre essa questão: se você usou um nome de usuário / senha real ao gerar os cabeçalhos incluídos em sua pergunta, saiba que você o revelou ao mundo no texto de o cabeçalho 'Autorização' acima, já que qualquer um que queira decifrá-lo trivialmente!)

Edit: eu tenho 'x'-out a string de autorização.

    
por 21.10.2010 / 20:00