基于Flask session机制的单点登录

本文介绍了如何使用Flask的session机制来实现单点登录。默认的Flask使用Werkzeug的secure cookie,而为了实现单点登录,需要转向服务端session。文章推荐了Flask-session扩展,并详细说明了结合Redis数据库来管理服务端session的方法,同时也提供了其他服务端session管理扩展的链接参考。
摘要由CSDN通过智能技术生成

flask默认的是 client side session

Flask by default usesthe Werkzeug provided 'secure cookie' as session system. It works by picklingthe session data, compressing it and base64 encoding it.

flask用的secure cookie方式保存session, 即session数据是加密后保存在用户cookie里. secure cookie是flask唯一自带的session方案

因此如果用flask session会话管理来实现单点登录,必须要使用服务端session,改进session方案。


基于Flask扩展:Flask-session 实现服务端Session

Flask 生成token进行单点登录(SSO)是一种在多个系统间共享用户认证信息的技术。在这种机制中,用户首先登录到一个认证服务器(通常是中心服务),认证成功后,该服务器会生成一个token(令牌)并发送给用户。之后,用户在访问其他受保护的系统时,只需要提供这个token,而不需要再次登录。 为了在Flask实现单点登录,你通常需要执行以下几个步骤: 1. 用户认证:在中心认证服务中,通过Flask框架创建一个登录视图,用户提交认证信息(如用户名和密码)。 2. 生成Token:认证成功后,使用Flask-JWT-Extended或其他类似的扩展来创建一个JWT(JSON Web Token)或者自定义的token。 3. 发送Token:将生成的token以HTTP响应的方式发送给客户端。Token通常放在响应头或响应体中返回给客户端。 4. Token验证:在其他受保护的服务中,创建一个Flask路由装饰器或中间件,用于在每次请求时验证请求头中的token。 5. 用户信息获取:验证通过后,服务器可以根据token中的信息提取用户身份,进行后续的业务逻辑处理。 下面是使用FlaskFlask-JWT-Extended来生成和验证token的一个简单示例: ```python from flask import Flask, jsonify, request from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity app = Flask(__name__) # 配置JWT_SECRET_KEY以确保token的安全性 app.config['JWT_SECRET_KEY'] = 'your-secret-key' jwt = JWTManager(app) # 用户登录视图,返回token @app.route('/login', methods=['POST']) def login(): # 假设这里进行了用户认证 if request.json.get('username') == 'admin' and request.json.get('password') == 'admin': access_token = create_access_token(identity='admin') return jsonify(access_token=access_token), 200 else: return jsonify(message="Bad credentials"), 401 # 受保护的路由,需要token验证 @app.route('/protected') @jwt_required() def protected(): current_user = get_jwt_identity() return jsonify(logged_in_as=current_user), 200 if __name__ == '__main__': app.run(debug=True) ``` 在上述代码中,`/login`路由用于登录并生成token,`/protected`路由则需要提供有效的token才能访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值