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
인증:
/auth
경로에 HTTP POST 요청을 보냈습니다. 인증이 성공하면 access_token을 받게 됩니다. 🎜🎜보호된 경로는 토큰을 수락하고 사용자를 인증합니다. 다음은 요청 헤더에 토큰을 전달하는 방법에 대한 예입니다. 🎜rrreee🎜 위 예에서는 요청 헤더의 Authorization
필드에 토큰을 추가하고 /에 전달합니다. 보호된
경로. 토큰이 유효하면 보호된 경로에서 응답을 받게 됩니다. 🎜🎜요약: 🎜이 기사에서는 Flask-JWT 확장을 사용하여 JSON 웹 토큰 기반 인증을 구현하는 방법을 배웠습니다. Flask 애플리케이션에 인증 데코레이터를 추가하는 방법을 배웠고 샘플 코드를 사용하여 인증하는 방법을 시연했습니다. JSON 웹 토큰은 다양한 웹 애플리케이션에 적용할 수 있는 간단하고 안전한 인증 메커니즘을 제공합니다. 🎜위 내용은 Flask-JWT를 사용하여 JSON 웹 토큰 기반 인증을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!