Введение
Аутентификация и авторизация — это два тесно связанных, но разных понятия в контексте безопасности и контроля доступа. В этой статье мы рассмотрим аутентификацию и авторизацию и их ключевые отличия. Мы будем использовать логин 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. Ваше здоровье!