Введение
Аутентификация и авторизация — это два тесно связанных, но разных понятия в контексте безопасности и контроля доступа. В этой статье мы рассмотрим аутентификацию и авторизацию и их ключевые отличия. Мы будем использовать логин Flask для создания приложения на основе входа в систему, чтобы ограничить доступ к выбранным маршрутам.
Аутентификация
Аутентификация относится к процессу проверки личности пользователя, приложения или устройства. Он включает в себя установление подлинности учетных данных пользователя, таких как имя пользователя и пароль, или использование других форм аутентификации, таких как биометрическая аутентификация или многофакторная аутентификация. Аутентификация гарантирует, что пользователь или приложение является тем, за кого они себя выдают, и помогает предотвратить несанкционированный доступ к ресурсам.
Авторизация
Авторизация, с другой стороны, относится к процессу предоставления или отказа в доступе к ресурсам на основе аутентифицированной личности пользователя или приложения. Он включает в себя определение политик управления доступом, которые определяют, какие действия пользователю или приложению разрешено выполнять с ресурсом на основе их удостоверения и разрешений. Авторизация гарантирует, что пользователи или приложения имеют доступ только к тем ресурсам, к которым им разрешен доступ, и помогает обеспечить соблюдение принципа наименьших привилегий.
Таким образом, аутентификация — это процесс проверки личности пользователя, а авторизация — это процесс предоставления или отказа в доступе к ресурсам на основе этой личности. Аутентификация устанавливает, кем является пользователь, а авторизация определяет, что ему разрешено делать.
Фласк Войти
Время сделать это самому! Давайте посмотрим на аутентификацию и авторизацию с помощью Python и Flask. Создайте новый каталог проекта для вашего приложения. Создайте файл с именем app.py и введите следующий код:
# Import the Flask and Flask-Login libraries from flask import Flask, render_template, request, session, redirect from flask_login import LoginManager, UserMixin, login_user, logout_user, current_user, login_required # Create a Flask app app = Flask(__name__) app.secret_key = '89798789jhvjhjg' # Configure Flask-Login login_manager = LoginManager() login_manager.init_app(app) # Define a User model class User(UserMixin): def __init__(self, username, password): self.username = username self.password = password def get_id(self): return self.username @login_manager.user_loader def load_user(user_id): return user if user.get_id() == user_id else None # Create a user user = User('admin', 'password') # Register the user with Flask-Login login_manager.user_loader(load_user) @app.route('/login', methods=['GET', 'POST']) def login(): if current_user.is_authenticated: return redirect('/protected') if request.method == 'POST': # Get the username and password from the request username = request.form['username'] password = request.form['password'] # Check if the username and password are valid if user.username == username and user.password == password: # Login the user login_user(user) return redirect('') # Otherwise, show an error message return render_template('login.html', error='Invalid username or password.') # Render the login form for GET requests return render_template('login.html') # Define a route for the logout page @app.route('/logout') def logout(): # Logout the user logout_user() return redirect('/') # Define a protected route @app.route('/protected') @login_required def protected(): return render_template('protected.html') # Run the app if __name__ == '__main__': app.run(debug=True)
Этот код создаст простое приложение Flask с двумя маршрутами: страницей входа и защищенной страницей. Страница входа позволит пользователям войти в систему с именем пользователя и паролем. Защищенная страница будет доступна только авторизованным пользователям.
Давайте пройдемся по основным компонентам и их функциям:
Создание приложения Flask:
- Создается экземпляр приложения Flask.
- Атрибуту
app.secret_key
присваивается случайное значение. Этот ключ используется для безопасной подписи файла cookie сеанса.
Настройка Flask-логина:
- Экземпляр
LoginManager
создан. - Метод
init_app()
вызывается с экземпляром приложения Flask для инициализации Flask-Login.
Определение модели пользователя:
- Определен класс
User
, который представляет модель пользователя. - Класс наследуется от
UserMixin
, который предоставляет реализации по умолчанию для некоторых необходимых методов Flask-Login. - Определен метод
get_id()
, который возвращает уникальный идентификатор пользователя.
Реализация обратного вызова user_loader:
- Функция
load_user
определена как обратный вызов user_loader. - Эта функция отвечает за загрузку объекта пользователя на основе идентификатора пользователя.
- Он проверяет, соответствует ли предоставленный идентификатор пользователя идентификатору пользователя, и возвращает объект пользователя или
None
соответственно.
Создание пользователя:
- Создается экземпляр класса
User
, представляющий конкретного пользователя. - Это всего лишь пример пользователя для демонстрационных целей.
Регистрация пользователя с помощью Flask-Login:
- Функция
load_user
зарегистрирована как обратный вызов user_loader для Flask-Login. - Это сообщает Flask-Login, как загружать объект пользователя на основе идентификатора пользователя.
Определение маршрута входа:
- Маршрут
/login
определяется с помощью декоратора@app.route
. - Он обрабатывает запросы GET и POST.
- Запросы GET отображают форму входа, а запросы POST обрабатывают отправку формы для входа пользователя.
Обработка аутентификации пользователя в маршруте входа:
- Если получен запрос POST (т. е. отправка формы), он извлекает имя пользователя и пароль из данных запроса.
- Он проверяет, соответствуют ли предоставленные учетные данные учетным данным пользователя.
- Если учетные данные совпадают, пользователь входит в систему с помощью функции
login_user
и перенаправляется на защищенную страницу (/protected
).
Определение маршрута выхода:
- Маршрут
/logout
определен для обработки выхода пользователя из системы. - Он выходит из системы вошедшего в систему пользователя с помощью функции
logout_user
и перенаправляет пользователя на домашнюю страницу ('/login'
).
Определение защищенного маршрута:
- Маршрут
/protected
определяется как защищенный маршрут, требующий аутентификации. - Декоратор
@login_required
гарантирует, что только аутентифицированные пользователи могут получить доступ к этому маршруту. - Если пользователь аутентифицирован, отображается защищенная страница.
Запуск приложения Flask:
- Приложение запускается с использованием
app.run()
с включенным режимомdebug
.
Чтобы использовать этот код, вам необходимо установить Python и Flask. После того, как вы установили Python и Flask, вы можете создать новый каталог и сохранить приведенный выше код в файле с именем app.py
. Затем вы можете запустить приложение с помощью следующей команды:
python app.py
После запуска приложения вы можете посетить следующие URL-адреса в своем веб-браузере:
https://localhost:5000/login
— Это загрузит страницу входа.https://localhost:5000/protected
— это перенаправит вас на страницу входа, если вы не вошли в систему. Если вы вошли в систему, вы сможете просмотреть защищенный маршрут.
Протестируйте свое приложение
Введите имя пользователя и пароль на странице входа.
Если вы введете неправильные учетные данные, вы увидите сообщение об ошибке на странице входа:
Сообщение об ошибке :
Доступ к защищенному маршруту
Затем введите правильные учетные данные. После успешного входа в систему вы можете получить доступ к защищенной странице:
Вот и все! Ваше приложение теперь имеет функции входа и выхода. Только пользователи с правами администратора могут получить доступ к защищенному маршруту! Идеальный!
Весь код для этого доступен на Github:
Это все для этой статьи! Не стесняйтесь оставлять отзывы или вопросы в комментариях. Если вы нашли это захватывающим чтением, хлопайте в ладоши и подписывайтесь! Я люблю кофе, поэтому не стесняйтесь купить мне кофе на https://paypal.me/pythoncodenemesis XD. Ваше здоровье!