python flask + jwt + SSO 校验案例

最近在学习python,并对开发框架的登录模块进行完善,总结一份记录。

首先,需要安装PyJWT模块,这是用于实现JWT校验的常用模块之一。可以使用pip命令来安装该模块,例如:

pip install PyJWT

然后,需要编写登录接口的代码,其中可以使用requests模块来向远程的SSO服务器发起get请求,获取到服务器返回的token并将其存储在header中。示例代码如下:

import requests
from flask import Flask, request

app = Flask(__name__)

@app.route('/login', methods=['GET'])
def login():
    ticket = request.args.get('ticket', 'QWERTYUIOPCAS')
    service = request.args.get('service', 'http://127.0.0.1:5000')
    sso_url = 'http://sso.service.com?ticket={}&service={}'.format(ticket, service)
    response = requests.get(sso_url)
    token = response.json()['token']
    headers = {'Authorization': 'Bearer {}'.format(token)}
    # 将token存储在header中,以便后续接口的校验使用
    # 可以将headers变量存储在全局变量中,以便后续接口的使用
    return 'Login Success!'

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

接下来,需要对get_list和get_menu接口进行JWT校验。可以使用Flask中的装饰器来实现该功能。示例代码如下:

import jwt
from flask import Flask, request

app = Flask(__name__)

# 定义装饰器,用于校验JWT
def jwt_required(func):
    def wrapper(*args, **kwargs):
        # 获取请求头中的Authorization字段
        token = request.headers.get('Authorization')
        if not token:
            return 'Missing Token', 401
        try:
            # 验证JWT,并获取payload中的信息
            payload = jwt.decode(token.split(' ')[-1], 'secret_key', algorithms=['HS256'])
            # 在payload中可以获取到用户名等信息,可以根据需要进行处理
        except:
            return 'Invalid Token', 401
        return func(*args, **kwargs)
    return wrapper

# 定义get_list接口,并使用jwt_required装饰器进行校验
@app.route('/get_list', methods=['GET'])
@jwt_required
def get_list():
    # 接口的实际实现
    return 'Get List Success!'

# 定义get_menu接口,并使用jwt_required装饰器进行校验
@app.route('/get_menu', methods=['GET'])
@jwt_required
def get_menu():
    # 接口的实际实现
    return 'Get Menu Success!'

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

在上述代码中,jwt_required装饰器用于校验JWT。当请求的Authorization字段中不包含有效的JWT时,会返回401状态码;当JWT无效时,会返回同样的状态码。可以根据实际需要进行修改。

最后,需要为项目生成一个密钥,并将其存储在配置文件中。在上述代码中,我们使用的是字符串'secret_key',实际上您应该使用一个更加安全的随机生成的字符串来作为密钥。可以使用Python中的secrets模块来生成随机字符串,例如:

import secrets

# 生成一个32字节的随机字符串作为密钥
secret_key = secrets.token_hex(32)

将密钥存储在配置文件中,并在项目启动时从配置文件中读取该密钥,例如:

app = Flask(__name__)
app.config.from_pyfile('config.py')

# 获取密钥
secret_key = app.config['SECRET_KEY']

在配置文件(config.py)中,需要添加以下内容:

SECRET_KEY = 'your-secret-key'

将'your-secret-key'替换为生成的随机字符串即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用Python Flask和HTML进行数据大屏展示,您需要使用以下步骤: 1. 安装Python Flask:您可以在命令行中使用pip install Flask命令来安装Flask。 2. 创建一个Flask应用程序:您需要使用Python创建一个Flask应用程序。您可以在Python文件中使用以下代码: ``` from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') if __name__ == '__main__': app.run(debug=True) ``` 3. 创建HTML模板:您需要创建一个HTML模板来展示您的数据大屏。您可以在templates文件夹下创建一个名为index.html的文件,并使用以下代码: ``` <!DOCTYPE html> <html> <head> <title>Data Dashboard</title> </head> <body> <div id="chart"></div> <script src="https://cdn.jsdelivr.net/npm/echarts@4.9.0/dist/echarts.min.js"></script> <script> var chart = echarts.init(document.getElementById('chart')); var option = { title: { text: 'Data Dashboard' }, tooltip: {}, xAxis: { data: ['Category 1', 'Category 2', 'Category 3', 'Category 4', 'Category 5'] }, yAxis: {}, series: [{ name: 'Data', type: 'bar', data: [10, 20, 30, 40, 50] }] }; chart.setOption(option); </script> </body> </html> ``` 在这个示例中,我们使用ECharts库创建一个简单的柱状图来展示数据。 4. 运行应用程序:在命令行中使用python app.py命令来运行您的应用程序。然后,您可以在浏览器中访问http://localhost:5000/来查看您的数据大屏展示。 这是一个简单的例子,您可以使用其他库和技术来创建更复杂的数据大屏展示。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值