Heim > Backend-Entwicklung > Python-Tutorial > Benutzerauthentifizierung und -autorisierung in Flask

Benutzerauthentifizierung und -autorisierung in Flask

WBOY
Freigeben: 2023-06-17 18:02:05
Original
2955 Leute haben es durchsucht

Mit der weiten Verbreitung von Webanwendungen sind Sicherheit und Datenschutz zu einem wichtigen Thema bei der Entwicklung von Webanwendungen geworden. Um die Sicherheit von Webanwendungen zu gewährleisten, sind Benutzerauthentifizierung und -autorisierung erforderlich. Als beliebtes Webentwicklungs-Framework bietet Flask viele Mechanismen zur Implementierung der Benutzerauthentifizierung und -autorisierung.

  1. Benutzerauthentifizierung

Benutzerauthentifizierung bezieht sich auf die Verwendung einer bestimmten Authentifizierungsmethode, um festzustellen, ob die Identität des Benutzers legitim ist, wenn der Benutzer auf eine Webanwendung zugreift. Flask bietet viele integrierte Methoden zur Implementierung der Benutzerauthentifizierung.

1.1. HTTP-Basisauthentifizierung

HTTP-Basisauthentifizierung ist ein auf dem HTTP-Protokoll basierender Authentifizierungsmechanismus, bei dem Benutzer beim Anfordern von Ressourcen einen Benutzernamen und ein Kennwort zur Überprüfung angeben müssen. Flask verfügt über eine integrierte HTTP-Basisauthentifizierungsfunktion, die einfach über die Erweiterung Flask-BasicAuth implementiert werden kann.

Um die Flask-BasicAuth-Erweiterung zu verwenden, müssen Sie ein BasicAuth-Objekt in der Flask-Anwendung installieren und erstellen und es dann der Routing-Funktion hinzufügen, die eine Basisauthentifizierung erfordert. Der Beispielcode lautet wie folgt:

from flask import Flask
from flask_basicauth import BasicAuth

app = Flask(__name__)

app.config['BASIC_AUTH_USERNAME'] = 'username'
app.config['BASIC_AUTH_PASSWORD'] = 'password'

basic_auth = BasicAuth(app)

@app.route('/')
@basic_auth.required
def index():
    return 'Hello, World!'
Nach dem Login kopieren

Im obigen Code werden die beiden Konfigurationselemente von BasicAuth verwendet, um den Benutzernamen und das Passwort festzulegen. Der @basic_auth.required-Dekorator für die Routing-Funktion implementiert die Basisauthentifizierungsfunktion.

1.2. Formularauthentifizierung

Die Formularauthentifizierung ist eine der häufigsten Authentifizierungsmethoden in Webanwendungen. Die Implementierung der Formularauthentifizierung in Flask erfordert im Allgemeinen die Verwendung der Flask-Login-Erweiterung.

Die Flask-Login-Erweiterung stellt eine UserMixin-Klasse bereit, die zur Darstellung des Benutzerdatenmodells verwendet werden kann. Der Beispielcode lautet wie folgt:

from flask_login import UserMixin

class User(UserMixin):
    def __init__(self, id, username, password):
        self.id = id
        self.username = username
        self.password = password

    def get_id(self):
        return str(self.id)
Nach dem Login kopieren

Im Beispielcode erbt die User-Klasse von der flask_login.UserMixin-Klasse, die häufig verwendete Benutzerauthentifizierungsmethoden enthält. In der Flask-Login-Erweiterung müssen Sie außerdem eine Benutzerladefunktion zum Laden von Benutzerdaten bereitstellen. Der Beispielcode lautet wie folgt:

from flask_login import login_user, LoginManager
from flask import Flask, render_template, redirect, url_for
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.secret_key = 'your secret key'

login_manager = LoginManager(app)

# 用户数据
users = {
    1: {'username': 'user1', 'password': 'password1'},
    2: {'username': 'user2', 'password': 'password2'},
    3: {'username': 'user3', 'password': 'password3'},
}

# 实现用户加载函数
@login_manager.user_loader
def load_user(user_id):
    user = users.get(int(user_id))
    if user:
        return User(user_id, user['username'], user['password'])
    return None

# 实现登录视图
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        for user_id, user_data in users.items():
            if user_data['username'] == username and check_password_hash(user_data['password'], password):
                user = User(user_id, username, password)
                login_user(user)
                return redirect(url_for('index'))
        return 'Invalid username/password combination'
    return render_template('login.html')

# 实现需要登录才能访问的视图
@app.route('/')
@login_required
def index():
    return 'Hello, World!'
Nach dem Login kopieren

Im Beispielcode erfordert die Verwendung der Flask-Login-Erweiterung die Initialisierung der Flask-Anwendung und das Festlegen von Secret_key sowie die anschließende Implementierung der Benutzerladefunktion über den Dekorator login_manager.user_loader. Schließlich kann die Anmeldekontrolle erreicht werden, indem der @login_required-Dekorator für Ansichtsfunktionen verwendet wird, für deren Zugriff eine Anmeldung erforderlich ist.

  1. Benutzerautorisierung

Benutzerautorisierung bezieht sich auf die Bestimmung, welche Benutzer auf welche Ressourcen zugreifen können. Die Implementierung der Benutzerautorisierung in Flask erfordert die Verwendung der Flask-Principal-Erweiterung.

Die Flask-Principal-Erweiterung bietet drei Klassen: Berechtigung, Rolle und Identität, mit denen Benutzerberechtigungen für den Zugriff auf Ressourcen definiert werden können. Die Berechtigung stellt die Berechtigung dar, Zugriff auf eine Ressource anzufordern, die Rolle stellt die Benutzeridentität oder -gruppe dar und die Identität stellt die Identitätsinformationen eines Benutzers dar.

Der Beispielcode lautet wie folgt:

from flask_principal import Principal, Identity, AnonymousIdentity, Permission, RoleNeed

app = Flask(__name__)

principal = Principal(app)

# 定义角色,这里假设有管理员和普通用户两种角色
admin_role = RoleNeed('admin')
user_role = RoleNeed('user')

# 定义权限
admin_permission = Permission(admin_role)
user_permission = Permission(user_role)

# 定义 Identity,需要通过 Identity 的认证才能访问需要权限管理的路由
@app.before_request
def before_request():
    identity = Identity(anonymous=True)
    if current_user.is_authenticated:
        identity = Identity(current_user.id)
        if current_user.is_admin:
            identity.provides.add(admin_role)
        else:
            identity.provides.add(user_role)
    principal.identity = identity

# 在需要受权限控制的路由上使用 requires(permission) 装饰器
@app.route('/admin')
@admin_permission.require(http_exception=403)
def admin_index():
    return 'Hello, Admin!'

@app.route('/user')
@user_permission.require(http_exception=403)
def user_index():
    return 'Hello, User!'
Nach dem Login kopieren

Im Beispielcode sind zwei Rollen definiert, nämlich admin_role und user_role. Jede Rolle kann eine Berechtigung definieren, mit der die Berechtigungen gesteuert werden, die für den Zugriff auf entsprechende Vorgänge erforderlich sind. In der Funktion before_request wird die Identitätsauthentifizierung implementiert und je nach Situation unterschiedliche Rollen hinzugefügt. Die Berechtigungskontrolle kann durch die Verwendung des „requires(permission)“-Dekorators auf Routen erreicht werden, die eine Berechtigungsverwaltung erfordern.

Flask bietet viele Methoden zur Implementierung der Benutzerauthentifizierung und -autorisierung. Die Beherrschung dieser Methoden kann Entwicklern dabei helfen, die Sicherheit von Webanwendungen zu verbessern. Gleichzeitig müssen Entwickler sorgfältig überlegen, welche Methode sie zur Implementierung der Benutzerauthentifizierung und -autorisierung verwenden, um die Anwendungssicherheit und den Schutz der Benutzerdaten zu gewährleisten.

Das obige ist der detaillierte Inhalt vonBenutzerauthentifizierung und -autorisierung in Flask. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage