张老师:李同学,我们师范大学需要建立一个统一的身份认证系统,你觉得应该从哪里入手?
李同学:首先得明确需求,比如学生、教师、管理员等不同角色的登录验证方式。其次,我们需要确保系统的安全性与扩展性。
张老师:好的,那你觉得可以用什么技术来实现呢?
李同学:我们可以使用Python语言结合Flask框架搭建后端服务,并采用JWT(JSON Web Token)进行身份验证。
张老师:听起来不错,能给我看看具体的代码吗?
李同学:当然可以。首先是安装依赖库:
pip install flask pyjwt
然后是核心代码部分:
from flask import Flask, request, jsonify
import jwt
import datetime
app = Flask(__name__)
SECRET_KEY = 'your_secret_key'
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data['username']
password = data['password']
# 这里可以加入数据库查询逻辑
if username == 'admin' and password == 'password':
payload = {
'user': username,
'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return jsonify({'token': token}), 200
else:
return jsonify({'message': 'Invalid credentials'}), 401
@app.route('/protected', methods=['GET'])
def protected():
token = request.headers.get('Authorization').split(' ')[1]
try:
decoded = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return jsonify({'message': f'Hello {decoded["user"]}, you are authenticated!'}), 200
except jwt.ExpiredSignatureError:
return jsonify({'message': 'Token expired'}), 401
except jwt.InvalidTokenError:
return jsonify({'message': 'Invalid token'}), 401
if __name__ == '__main__':
app.run(debug=True)
张老师:这段代码看起来很简洁,JWT确实是个好选择。不过安全性上还需要加强,比如添加HTTPS支持。
李同学:是的,HTTPS是必须的,另外还可以定期更新SECRET_KEY,防止被破解。
张老师:明白了,谢谢你提供的方案!
李同学:不客气,如果有其他问题随时问我。
]]>