小明:最近我们在开发一个新系统,需要实现统一身份认证,你有什么建议吗?
小李:统一身份认证(SSO)是个不错的选择,可以使用OAuth 2.0或JWT来实现。比如,我们可以用Python和Flask做一个简单的示例。
小明:那具体怎么写代码呢?
小李:我们先定义一个用户模型,然后生成JWT令牌。下面是一个简单的例子:
from flask import Flask, request, jsonify
import jwt
app = Flask(__name__)
SECRET_KEY = 'your-secret-key'
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username')
password = request.json.get('password')
if username == 'admin' and password == '123456':
token = jwt.encode({'user': username}, SECRET_KEY, algorithm='HS256')
return jsonify({'token': token})
return jsonify({'error': 'Invalid credentials'}), 401
小明:明白了,那如何用这个令牌来访问受保护的资源呢?
小李:我们可以添加一个验证函数,在请求头中检查Token是否有效:
@app.route('/protected', methods=['GET'])
def protected():
token = request.headers.get('Authorization')
try:
data = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return jsonify({'message': f'Hello, {data["user"]}! You are authenticated.'})
except:
return jsonify({'error': 'Unauthorized'}), 401
小明:这样就能实现基本的统一身份认证了,那手册该怎么配合使用呢?
小李:手册可以详细记录每个接口的使用方法、参数说明以及安全策略,方便开发人员和运维人员查阅。
小明:明白了,感谢你的帮助!
小李:不客气,有需要随时问我。