Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Flask-RESTful dan Flask-JWT: Pengesahan dan kebenaran pengguna dalam aplikasi web Python

Flask-RESTful dan Flask-JWT: Pengesahan dan kebenaran pengguna dalam aplikasi web Python

WBOY
WBOYasal
2023-06-17 10:42:581603semak imbas

Dalam aplikasi web moden, pengesahan dan kebenaran pengguna merupakan langkah keselamatan yang sangat kritikal. Dengan populariti dan penggunaan Python, Flask-RESTful dan Flask-JWT telah menjadi penyelesaian pilihan untuk pengesahan dan kebenaran pengguna dalam aplikasi web Python. Artikel ini akan memperkenalkan secara terperinci penggunaan Flask-RESTful dan Flask-JWT, dan cara melaksanakan pengesahan dan kebenaran pengguna dalam aplikasi web Python.

Pengenalan kepada Flask-RESTful

Flask-RESTful ialah perpustakaan lanjutan Flask yang boleh membantu membina antara muka API RESTful dengan cepat. Ia menyediakan banyak fungsi berguna, seperti pengesahan input, parsing permintaan, dsb. Dengan Flask-RESTful, kami boleh membina API Web ringkas dengan mudah. Berikut ialah contoh mudah:

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)

Dalam contoh ini, kami mencipta sumber bernama HelloWorld dan menambahkannya pada objek api. Akhir sekali, kita boleh mengakses sumber / melalui laluan HelloWorld. Apabila kita mengakses laluan /, kaedah HelloWorld sumber get dipanggil dan respons JSON {'hello': 'world'} dikembalikan.

Pengenalan kepada Flask-JWT

Flask-JWT ialah satu lagi perpustakaan sambungan untuk Flask untuk melaksanakan pengesahan JSON Web Token (JWT) dalam aplikasi web. JWT ialah standard terbuka untuk menghantar maklumat dengan selamat antara pengguna dan pelayan. Ia berdasarkan JSON dan biasanya terdiri daripada tiga bahagian, iaitu pengepala, muatan dan tandatangan. Pengepala mengandungi jenis JWT dan maklumat algoritma yang digunakan, muatan mengandungi maklumat data yang perlu dihantar, dan tandatangan digunakan untuk mengesahkan sama ada data itu betul. Flask-JWT memudahkan penjanaan dan pengesahan JWT, menjadikannya lebih mudah untuk melaksanakan pengesahan pengguna dalam aplikasi web. Berikut ialah contoh mudah:

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)

Dalam contoh ini, kami mula-mula mentakrifkan kelas User untuk menyimpan maklumat pengesahan pengguna. Dalam fungsi authenticate, masukkan nama pengguna dan kata laluan, dan fungsi itu akan mengembalikan objek pengguna. Dalam fungsi identity, masukkan muatan jwt, dan fungsi tersebut akan mengembalikan objek pengguna berdasarkan id pengguna dalam jwt. Dengan memanggil pembina JWT, kami menambah kaedah pengesahan tersuai dan kaedah pengenalan pengguna tersuai pada aplikasi. Akhir sekali, protected penghias digunakan dalam @jwt_required penghias laluan untuk memastikan bahawa hanya pengguna yang disahkan boleh mengakses sumber yang dilindungi.

Gabungan Flask-RESTful dan Flask-JWT

Kita boleh menggunakan Flask-RESTful dan Flask-JWT bersama-sama untuk melaksanakan aplikasi web yang lengkap, termasuk mekanisme pengesahan dan kebenaran pengguna. Berikut ialah contoh mudah:

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)

Dalam contoh ini, sebagai tambahan kepada sumber HelloWorld, kami juga mentakrifkan sumber Secret dan sumber Login. Dalam sumber Secret, lulus @jwt_required penghias untuk memastikan bahawa hanya pengguna yang disahkan mempunyai akses. Dalam sumber Login, kami menghuraikan permintaan POST dan menggunakan fungsi authenticate untuk mengesahkan maklumat identiti pengguna. Jika pengesahan berjaya, token JWT dikembalikan, jika tidak, kod status 401 dikembalikan. Akhir sekali, kami menambah semua sumber pada objek api dan melancarkan aplikasi web menggunakan kaedah run Flask.

Ringkasan

Dalam pembangunan aplikasi web Python, Flask-RESTful dan Flask-JWT ialah perpustakaan sambungan yang sangat berguna. Melaluinya, kami boleh membina dan melindungi API Web dengan mudah serta menambahkan mekanisme pengesahan dan kebenaran pengguna pada aplikasi web. Menggunakan Flask-RESTful dan Flask-JWT boleh mengurangkan masa pembangunan dan kos pembangunan kami, menjadikannya lebih mudah untuk kami melaksanakan fungsi aplikasi web.

Atas ialah kandungan terperinci Flask-RESTful dan Flask-JWT: Pengesahan dan kebenaran pengguna dalam aplikasi web Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn