Назад | Перейти на главную страницу

Передать имя пользователя из Apache Basic Authentication в Cherrypy

Мне нужно использовать базовую аутентификацию apache для части моего приложения. Я хотел бы получить аутентифицированное имя пользователя от apache, но я не могу найти, где к нему получить доступ. Я вижу имя пользователя в журнале apache, поэтому я знаю, что оно где-то там. После аутентификации пользователя с помощью apache запрос отправляется через прокси на сервер Cherrypy.

Вот раздел моей конфигурации apache vhost:

<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>

Бит аутентификации пользователя и прокси работает нормально. Как только запрос будет аутентифицирован и отправлен в cherrypy, вот заголовки, которые у меня есть в 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'}

Может ли кто-нибудь помочь мне получить доступ к имени пользователя из apache basic auth?

Я добавил заголовок для передачи аутентифицированного пользователя на основе apache.

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

Ваше приложение cherrypy получает информацию об основной аутентификации, поскольку мы видим это в заголовках:

'Authorization': 'Basic xxxxxxxxxxxxxxxxxxxxxx==',

Вам просто необходимо:

  1. декодировать строку Base64 'xxxxxxxxxxxxxxxxxxxxxx ==' и
  2. извлеките имя пользователя из декодированной строки имя пользователя: пароль.

Поскольку это не stackoverflow ;) , Я не буду утруждать себя приведением точной реализации вышеизложенного на Python, но это должно помочь вам начать. В Запись в Википедии о базовой аутентификации доступа достаточно информативен и содержит фрагменты кода на разных языках.

(Просто примечание по безопасности по этому вопросу: если вы использовали настоящий имя пользователя / пароль при генерации заголовков, включенных в ваш вопрос, имейте в виду, что вы раскрыли его миру в тексте заголовка «Авторизация» выше, поскольку любой, кто хочет, может тривиально его расшифровать!)

Изменить: я удалил строку авторизации.