Как получить базовое имя пользователя для аутентификации с помощью скрипта CGI Python?

1

Позвольте мне предисловие к этому, сказав, что я инженер в крупной компании и НЕ программист, поэтому мне жаль, если я уйду. Этот вопрос действительно был трудным для google ответа, который обычно означает, что я задаю вопрос ужасно. Поэтому я постараюсь ответить пользователям на то, чтобы работать над решением, если вы позволите мне.

Я также отметил несколько языков, потому что я не уверен, что это решение javascript или решение python. Приношу извинения.

В принципе, когда пользователь заполняет форму, он запускает скрипт cgi python, который хранит информацию в базе данных. Я хочу автоматизировать запись имени пользователя, поэтому пользователю не нужно заполнять его вручную (не для обеспечения безопасности, просто для простоты использования)

Моя программа находится на сервере Apache RedHat и в /etc/httpd/conf. Я поместил следующее в файл httpd.conf:

<Directory /var/www/html/program>
##### LDAP Login #######################
AuthType Basic
AuthName "ProbeEng Webserver: Enter Your BIGCOMPANY Username and Password"
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://ldap.city.bigcompany.com/ou=mtworkers,o=bigcompany.com?uid"

##### Require Authentication
Require valid-user

Order deny,allow
Allow from all

</Directory>

Когда пользователи получают доступ к моей программе, они должны ввести свое имя пользователя и пароль BIGCOMPANY. Как я могу отправить это имя пользователя в свой cgi-скрипт python. Программа, на которой они запускают форму, также является cgi-скриптом python, который генерирует html.

Я попробовал следующее:

try:
   username = getpass.getuser()

Но это не работает.

Возможно ли это при использовании cgi-скрипта, если да, то как мне получить доступ к имени пользователя?

Спасибо

Теги:
authentication

1 ответ

1
Лучший ответ

Если веб-сервер аутентифицировал пользователя, обычно имя пользователя будет в заголовке и будет отображаться как переменная среды в os.environ в скрипте CGI Python. Обычно это имя заголовка REMOTE_USER.

Вы можете попробовать распечатать все переменные среды, просто чтобы увидеть, что там.

import os
for key, value in os.environ.items():
    print(key, value)

Как только вы узнаете, какой ключ вы ищете (возможно, 'REMOTE_USER'), просто 'REMOTE_USER' его как

import os
username = os.environ.get('REMOTE_USER')

Хотя, модуль CGI, вероятно, не так, как вы хотите запускать это приложение. Каждый запрос порождает новый процесс и с любым серьезным количеством трафика может быстро стать обузой для этого сервера.

  • 0
    Эй, sytech, спасибо за ответ. Во-первых, я определенно знаю, что CGI не является текущим способом, но я не знал об этом, когда запустил это приложение. Все мои будущие приложения сделаны в wsgi через флягу. Если посмотреть на переменные окружения, REMOTE_USER нет, есть только REMOTE_ADDR с IP-адресом. Могу ли я получить пользователя с IP-адреса или он не связан с базовой учетной записью пользователя?
  • 0
    Я соврал @sytech, у него есть REMOTE_USER. Я случайно проверил это на странице, не проходящей аутентификацию на моем собственном веб-сервере. Большое спасибо за вашу помощь, я действительно ценю это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню