А объясните логику авторизации и как ей пользоваться
К примеру, мне надо допускать пользователя до определенной страницы, если он прошел авторизацию, как это делается? Вот к примеру имеем базу ldap, там пароль и юзер, он вводит логин и пароль в определенной форме, если авторизация успешна, то что присваивается сессии? или чему там должно присвоится что бы страница понимала, что он авторизован? Можете на коленке написать небольшой код? К примеру , вот, своими словами
import ldap
def auth
server = 192....
login = login
pass = pass
auth(server, login, pass)
if auth = True
open index.html
else
print("неверный пароль")
А цель такая, если пользователь прошел через ldap авторизацию, то его допускать до формы сайта, где он может оставить запись.
Ответы (1 шт):
Во-первых, нужно различать аутентификацию и авторизацию.
Аутентификация
Задача этой процедуры установить, что за пользователь делает запрос. Обычно процедура выглядит так, что в сессии хранится имя пользователя, который уже залогинился (или другая идентифицирующая пользователя информация).
Т.е. при первом запросе в сессии нет имени пользователя (возможно и сессии нет и она сначала создается). Если нет имени пользователя в сессии, а запрашиваемая страница недоступна анонимно, то запускается процедура аутентификации. То есть пользователь перенаправляется на страницу логина. После ввода правильного пароля в сессию записывается имя пользователя.
Собственно проверка зависит от того где хранятся данные, которые используются (БД, ldap и т.д.). Может быть многофакторной.
Авторизация
Цель процедуры проверить, что аутентифицированный пользователь имеет право делать запрашиваемую операцию. Для этого вначале проверяется, что пользователь аутентифицирован (если нет - проходим процедуру аутентификации). Дальше проверяем, что пользователь может делать операцию.
Эта проверка зависит от реализации. Должен быть какой-то способ задавать, кто может делать операцию. Для веб приложения это обычно означает может ли пользователь иметь доступ к данной странице, т.е. в обработчику запроса. Права обычно даются не конкретным пользователям, а ролям (или группам). А уж каждый пользователь входит в какие-то группы (т.е. имеет соответствующие роли).
В фласке это выглядит как-то так:
@route('/admin/dashboard')
@roles_required('Admin')
def admin_dashboard():
# render the admin dashboard
Это говорит, что только пользователи с ролью Admin имеют доступ.