>백엔드 개발 >파이썬 튜토리얼 >Flask-RESTful 및 Flask-JWT: Python 웹 애플리케이션의 사용자 인증 및 권한 부여

Flask-RESTful 및 Flask-JWT: Python 웹 애플리케이션의 사용자 인증 및 권한 부여

WBOY
WBOY원래의
2023-06-17 10:42:581698검색

최신 웹 애플리케이션에서 사용자 인증 및 권한 부여는 매우 중요한 보안 조치입니다. Python의 인기와 사용으로 인해 Flask-RESTful 및 Flask-JWT는 Python 웹 애플리케이션의 사용자 인증 및 권한 부여를 위해 선호되는 솔루션이 되었습니다. 이 기사에서는 Flask-RESTful 및 Flask-JWT의 사용과 Python 웹 애플리케이션에서 사용자 인증 및 권한 부여를 구현하는 방법을 자세히 소개합니다.

Flask-RESTful 소개

Flask-RESTful은 RESTful API 인터페이스를 빠르게 구축하는 데 도움이 되는 Flask의 확장 라이브러리입니다. 입력 유효성 검사, 요청 구문 분석 등과 같은 많은 유용한 기능을 제공합니다. Flask-RESTful을 사용하면 간단한 웹 API를 쉽게 구축할 수 있습니다. 다음은 간단한 예입니다.

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)

이 예에서는 HelloWorld라는 리소스를 생성하고 이를 api 개체에 추가합니다. 마지막으로 / 경로를 통해 HelloWorld 리소스에 액세스할 수 있습니다. / 경로에 액세스하면 HelloWorld 리소스의 get 메서드를 호출하고 JSON 응답 {'hello'를 반환합니다. '세계'}. HelloWorld的资源(Resource),并将其添加到了api对象中。最终,我们可以通过/路由来访问HelloWorld资源。当我们访问/路由时,调用HelloWorld资源的get方法,并返回一个JSON响应{'hello': 'world'}

Flask-JWT的介绍

Flask-JWT是Flask的另一个扩展库,用于在Web应用程序中实现JSON Web Token(JWT)身份验证。JWT是一个开放标准,用于在用户和服务器之间安全地传输信息。它是基于JSON的,通常由三个部分组成,分别是头部、载荷和签名。头部包含了JWT的类型和所使用的算法信息,载荷包含了需要传输的数据信息,签名用于验证数据是否正确。Flask-JWT简化了JWT的生成和验证,使得在Web应用程序中实现用户身份验证变得更加容易。下面是一个简单的示例:

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'

class User(object):
    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, 'user1', 'password'),
    User(2, 'user2', 'password')
]

username_table = {u.username: u for u in users}
userid_table = {u.id: u for u in users}

def authenticate(username, password):
    user = username_table.get(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 userid_table.get(user_id, None)

jwt = JWT(app, authenticate, identity)

@app.route('/protected')
@jwt_required()
def protected():
    return {'hello': current_identity.username}

if __name__ == '__main__':
    app.run(debug=True)

在这个例子中,我们首先定义了一个User类,用于存储用户的身份验证信息。在authenticate函数中,输入一个用户名和密码,该函数将返回一个用户对象。在identity函数中,输入一个jwt载荷,该函数将根据jwt中的用户id返回一个用户对象。通过调用JWT构造函数,我们为应用程序添加了一个自定义的身份验证方法和一个自定义的用户标识方法。最后,在protected路由的装饰器中使用了@jwt_required装饰器,以确保只有经过身份验证的用户才能访问受保护的资源。

Flask-RESTful和Flask-JWT的结合

我们可以将Flask-RESTful和Flask-JWT结合起来使用,实现完整的Web应用程序,包括用户身份验证和授权机制。下面是一个简单的示例:

from flask import Flask
from flask_restful import Resource, Api, reqparse
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'
api = Api(app)

class User(object):
    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, 'user1', 'password'),
    User(2, 'user2', 'password')
]

username_table = {u.username: u for u in users}
userid_table = {u.id: u for u in users}

def authenticate(username, password):
    user = username_table.get(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 userid_table.get(user_id, None)

jwt = JWT(app, authenticate, identity)

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

class Secret(Resource):
    @jwt_required()
    def get(self):
        return {'secret': 'resource', 'user': current_identity.username}

class Login(Resource):
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('username', type=str, help='Username cannot be blank', required=True)
        parser.add_argument('password', type=str, help='Password cannot be blank', required=True)
        args = parser.parse_args()
        
        user = authenticate(args['username'], args['password'])
        if user:
            return {'access_token': jwt.jwt_encode_callback({'identity': user.id})}
        else:
            return {'message': 'Invalid username or password'}, 401

api.add_resource(HelloWorld, '/')
api.add_resource(Secret, '/secret')
api.add_resource(Login, '/login')

if __name__ == '__main__':
    app.run(debug=True)

在这个例子中,我们除了定义了HelloWorld资源外,还定义了Secret资源和Login资源。在Secret资源中,通过@jwt_required装饰器,确保只有经过身份验证的用户才能访问。在Login资源中,我们对POST请求进行了解析,并使用authenticate函数来验证用户的身份信息。如果验证成功,则返回JWT token,否则返回401状态码。最终,我们将所有的资源添加到了api对象中,并使用Flask的run

Flask-JWT 소개

Flask-JWT는 웹 애플리케이션에서 JWT(JSON Web Token) 인증을 구현하기 위한 Flask의 또 다른 확장 라이브러리입니다. JWT는 사용자와 서버 간에 정보를 안전하게 전송하기 위한 개방형 표준입니다. JSON을 기반으로 하며 일반적으로 헤더, 페이로드, 서명의 세 부분으로 구성됩니다. 헤더에는 사용된 JWT 유형 및 알고리즘 정보가 포함되고, 페이로드에는 전송해야 할 데이터 정보가 포함되며, 서명은 데이터가 올바른지 확인하는 데 사용됩니다. Flask-JWT는 JWT 생성 및 확인을 단순화하여 웹 애플리케이션에서 사용자 인증을 더 쉽게 구현할 수 있도록 해줍니다. 다음은 간단한 예입니다.

rrreee

이 예에서는 먼저 사용자의 인증 정보를 저장하기 위해 User 클래스를 정의합니다. authenticate 함수에 사용자 이름과 비밀번호를 입력하면 함수가 사용자 개체를 반환합니다. identity 함수에 jwt 페이로드를 입력하면 이 함수는 jwt의 사용자 ID를 기반으로 사용자 개체를 반환합니다. JWT 생성자를 호출하여 애플리케이션에 사용자 정의 인증 방법과 사용자 정의 사용자 식별 방법을 추가합니다. 마지막으로 @jwt_required 데코레이터는 인증된 사용자만 보호된 리소스에 액세스할 수 있도록 protected 경로의 데코레이터에서 사용됩니다. 🎜🎜Flask-RESTful과 Flask-JWT의 결합🎜🎜Flask-RESTful과 Flask-JWT를 함께 사용하여 사용자 인증 및 권한 부여 메커니즘을 포함한 완전한 웹 애플리케이션을 구현할 수 있습니다. 다음은 간단한 예입니다. 🎜rrreee🎜이 예에서는 HelloWorld 리소스 정의 외에도 Secret 리소스 및 Login도 정의합니다. 자원. Secret 리소스에서 @jwt_required 데코레이터를 전달하여 인증된 사용자만 액세스할 수 있도록 합니다. Login 리소스에서 POST 요청을 구문 분석하고 authenticate 기능을 사용하여 사용자의 신원 정보를 확인합니다. 확인에 성공하면 JWT 토큰이 반환되고, 그렇지 않으면 401 상태 코드가 반환됩니다. 마지막으로 모든 리소스를 api 개체에 추가하고 Flask의 run 메서드를 사용하여 웹 애플리케이션을 시작했습니다. 🎜🎜요약🎜🎜Python 웹 애플리케이션 개발에서 Flask-RESTful 및 Flask-JWT는 매우 유용한 확장 라이브러리입니다. 이를 통해 웹 API를 쉽게 구축 및 보호하고 웹 애플리케이션에 사용자 인증 및 권한 부여 메커니즘을 추가할 수 있습니다. Flask-RESTful과 Flask-JWT를 사용하면 개발 시간과 개발 비용을 줄일 수 있어 웹 애플리케이션의 기능을 더 쉽게 구현할 수 있습니다. 🎜

위 내용은 Flask-RESTful 및 Flask-JWT: Python 웹 애플리케이션의 사용자 인증 및 권한 부여의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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