Введение

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