Heim > Backend-Entwicklung > Python-Tutorial > So implementieren Sie die JSON-Web-Token-basierte Authentifizierung mit Flask-JWT

So implementieren Sie die JSON-Web-Token-basierte Authentifizierung mit Flask-JWT

PHPz
Freigeben: 2023-08-02 16:43:51
Original
1271 Leute haben es durchsucht

So implementieren Sie die auf JSON Web Token basierende Authentifizierung mit Flask-JWT

Übersicht:
In modernen Webanwendungen ist Sicherheit von entscheidender Bedeutung. Einer der Schlüsselaspekte ist die Authentifizierung. JSON Web Token (JWT) ist ein offener Standard für die Weitergabe von Ansprüchen zwischen Webanwendungen. Es kann die Datenintegrität durch Signaturen überprüfen und eine tokenbasierte Benutzerauthentifizierung implementieren.

In diesem Artikel stellen wir vor, wie Sie die Flask-JWT-Erweiterung verwenden, um eine JSON-Web-Token-basierte Authentifizierung zum Schutz unserer Flask-Anwendung zu implementieren.

Flask-JWT installieren:
Stellen Sie zunächst sicher, dass Flask und Flask-JWT installiert sind. Sie können installiert werden mit:

pip install flask
pip install flask-jwt
Nach dem Login kopieren

So verwenden Sie:
Flask-JWT bietet Dekoratoren, um den Flask-Routing-Funktionen einfach eine Token-Validierung hinzuzufügen. Hier ist ein einfaches Beispiel:

from flask import Flask
from flask_jwt import JWT, jwt_required, current_identity
from werkzeug.security import safe_str_cmp

app = Flask(__name__)
app.config['SECRET_KEY'] = 'super-secret-key'

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

    def __str__(self):
        return f'User(id={self.id}, username={self.username})'

users = [
    User(1, 'admin', 'adminpassword'),
]

def authenticate(username, password):
    user = next((user for user in users if user.username == username), None)
    if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')):
        return user

def identity(payload):
    user_id = payload['identity']
    return next((user for user in users if user.id == user_id), None)

jwt = JWT(app, authenticate, identity)

@app.route('/protected')
@jwt_required()
def protected():
    return f'Hello, {current_identity}! This route is protected.'

if __name__ == '__main__':
    app.run()
Nach dem Login kopieren

Im obigen Beispielcode haben wir zunächst die erforderlichen Module importiert. Dann definieren wir eine Benutzerklasse, um die Benutzerentität darzustellen. Als Nächstes definieren wir eine Liste von Benutzern (vorausgesetzt, es handelt sich um eine Datenbank), die für die Authentifizierung verwendet werden sollen.

Authenticate-Funktion wird verwendet, um einen Benutzer anhand des angegebenen Benutzernamens und Passworts zu authentifizieren. Die Identitätsfunktion ruft das Benutzerobjekt basierend auf der Benutzer-ID in der JWT-Nutzlast ab.

Dann haben wir eine Flask-Anwendung initialisiert und einen geheimen Schlüssel (SECRET_KEY) festgelegt. Anschließend haben wir ein JWT-Objekt mithilfe der JWT-Klasse initialisiert und ihm die Authentifizierungs- und Identitätsfunktionen übergeben.

Der Dekorator @jwt_required() wird auf der Route /protected verwendet, um die Route zu schützen. Nur authentifizierte Benutzer können darauf zugreifen. /protected路由上使用了@jwt_required()装饰器,用于保护该路由。只有经过身份验证的用户才能访问它。

最后,我们启动了Flask应用程序。

进行身份验证:
要进行身份验证,我们需要向应用程序发出HTTP POST请求,传递用户名和密码。Flask-JWT将为我们生成一个JWT令牌。

以下是如何进行身份验证的示例代码:

import requests

def authenticate(username, password):
    response = requests.post('http://localhost:5000/auth', json={'username': username, 'password': password})
    if response.status_code == 200:
        return response.json()['access_token']

access_token = authenticate('admin', 'adminpassword')
print(f'Access Token: {access_token}')
Nach dem Login kopieren

在上面的示例中,我们发送了一个HTTP POST请求到/auth路由,传递了用户名和密码的JSON数据。如果身份验证成功,我们将获得一个access_token。

保护的路由将接受该令牌并验证用户身份。下面是如何在请求头中传递令牌的示例:

import requests

headers = {
    'Authorization': f'Bearer {access_token}'
}

response = requests.get('http://localhost:5000/protected', headers=headers)
print(response.text)
Nach dem Login kopieren

在上面的示例中,我们将令牌添加到请求头的Authorization字段中,并将其传递给/protected

Schließlich starten wir die Flask-Anwendung.


Authentifizierung:

Zur Authentifizierung müssen wir eine HTTP-POST-Anfrage an die Anwendung stellen und dabei den Benutzernamen und das Passwort übergeben. Flask-JWT generiert für uns ein JWT-Token. 🎜🎜Hier ist der Beispielcode für die Authentifizierung: 🎜rrreee🎜Im obigen Beispiel haben wir eine HTTP-POST-Anfrage an die Route /auth gesendet und dabei die JSON-Daten des Benutzernamens und des Passworts übergeben. Wenn die Authentifizierung erfolgreich ist, erhalten wir ein access_token. 🎜🎜Die geschützte Route akzeptiert das Token und authentifiziert den Benutzer. Hier ist ein Beispiel für die Übergabe eines Tokens in einem Anforderungsheader: 🎜rrreee🎜 Im obigen Beispiel fügen wir das Token zum Feld Authorization des Anforderungsheaders hinzu und übergeben es an / geschützteRoute. Wenn das Token gültig ist, erhalten wir eine Antwort von der geschützten Route. 🎜🎜Zusammenfassung: 🎜In diesem Artikel haben wir gelernt, wie man die Flask-JWT-Erweiterung verwendet, um die JSON-Web-Token-basierte Authentifizierung zu implementieren. Wir haben gelernt, wie man einer Flask-Anwendung einen Authentifizierungs-Decorator hinzufügt, und haben gezeigt, wie man sich mit Beispielcode authentifiziert. JSON Web Token bietet einen einfachen und sicheren Authentifizierungsmechanismus, der auf eine Vielzahl von Webanwendungen angewendet werden kann. 🎜

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die JSON-Web-Token-basierte Authentifizierung mit Flask-JWT. 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