>백엔드 개발 >파이썬 튜토리얼 >Flask-JWT를 사용하여 JSON 웹 토큰 기반 인증을 구현하는 방법

Flask-JWT를 사용하여 JSON 웹 토큰 기반 인증을 구현하는 방법

PHPz
PHPz원래의
2023-08-02 16:43:511271검색

Flask-JWT를 사용하여 JSON 웹 토큰 기반 인증을 구현하는 방법

개요:
최신 웹 애플리케이션에서는 보안이 매우 중요합니다. 중요한 측면 중 하나는 인증입니다. JWT(JSON 웹 토큰)는 웹 애플리케이션 간에 클레임을 전달하기 위한 개방형 표준입니다. 서명을 통해 데이터 무결성을 확인하고 토큰 기반 사용자 인증을 구현할 수 있습니다.

이 기사에서는 Flask-JWT 확장을 사용하여 Flask 애플리케이션을 보호하기 위해 JSON 웹 토큰 기반 인증을 구현하는 방법을 소개합니다.

Flask-JWT 설치: ​​
먼저 Flask와 Flask-JWT가 설치되어 있는지 확인하세요. 다음을 사용하여 설치할 수 있습니다:

pip install flask
pip install flask-jwt

사용 방법:
Flask-JWT는 Flask 라우팅 기능에 토큰 검증을 쉽게 추가할 수 있는 데코레이터를 제공합니다. 다음은 간단한 예입니다.

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()

위의 예 코드에서는 먼저 필수 모듈을 가져왔습니다. 그런 다음 사용자 엔터티를 나타내는 User 클래스를 정의합니다. 다음으로 인증에 사용할 사용자 목록(데이터베이스 가정)을 정의합니다.

인증 기능은 제공된 사용자 이름과 비밀번호를 기반으로 사용자를 인증하는 데 사용됩니다. ID 함수는 JWT 페이로드의 사용자 ID를 기반으로 사용자 객체를 가져옵니다.

그런 다음 Flask 애플리케이션을 초기화하고 비밀 키(SECRET_KEY)를 설정했습니다. 그런 다음 JWT 클래스를 사용하여 jwt 객체를 초기화하고 인증 및 ID 기능을 전달했습니다.

@jwt_required() 데코레이터는 경로를 보호하기 위해 /protected 경로에서 사용됩니다. 인증된 사용자만 접근할 수 있습니다. /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}')

在上面的示例中,我们发送了一个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)

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

마지막으로 Flask 애플리케이션이 실행됩니다.


인증:

인증하려면 사용자 이름과 비밀번호를 전달하여 애플리케이션에 HTTP POST 요청을 해야 합니다. Flask-JWT는 JWT 토큰을 생성합니다. 🎜🎜인증 방법에 대한 샘플 코드는 다음과 같습니다. 🎜rrreee🎜위의 예에서는 사용자 이름과 비밀번호의 JSON 데이터를 전달하여 /auth 경로에 HTTP POST 요청을 보냈습니다. 인증이 성공하면 access_token을 받게 됩니다. 🎜🎜보호된 경로는 토큰을 수락하고 사용자를 인증합니다. 다음은 요청 헤더에 토큰을 전달하는 방법에 대한 예입니다. 🎜rrreee🎜 위 예에서는 요청 헤더의 Authorization 필드에 토큰을 추가하고 /에 전달합니다. 보호된경로. 토큰이 유효하면 보호된 경로에서 응답을 받게 됩니다. 🎜🎜요약: 🎜이 기사에서는 Flask-JWT 확장을 사용하여 JSON 웹 토큰 기반 인증을 구현하는 방법을 배웠습니다. Flask 애플리케이션에 인증 데코레이터를 추가하는 방법을 배웠고 샘플 코드를 사용하여 인증하는 방법을 시연했습니다. JSON 웹 토큰은 다양한 웹 애플리케이션에 적용할 수 있는 간단하고 안전한 인증 메커니즘을 제공합니다. 🎜

위 내용은 Flask-JWT를 사용하여 JSON 웹 토큰 기반 인증을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.