构建统一身份认证系统及其演示
2025-01-24 09:36
在现代应用开发中,统一身份认证(Single Sign-On, SSO)已成为一种常见需求。本文将介绍如何构建一个基于JSON Web Tokens (JWT) 和 OAuth2协议的统一身份认证系统,并通过一个简单的Python Flask应用程序进行演示。
首先,我们定义一个简单的用户模型,用于存储用户信息:
class User: def __init__(self, id, username, password): self.id = id self.username = username self.password = password
接下来,我们实现一个简单的JWT认证服务,用于生成和验证JWT令牌:
import jwt from datetime import datetime, timedelta SECRET_KEY = 'your_secret_key' def generate_jwt(user): payload = { 'user_id': user.id, 'username': user.username, 'exp': datetime.utcnow() + timedelta(hours=1) } token = jwt.encode(payload, SECRET_KEY, algorithm='HS256') return token def verify_jwt(token): try: payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256']) return payload except jwt.ExpiredSignatureError: return None
最后,我们创建一个Flask应用来处理登录请求并返回JWT令牌:
from flask import Flask, request, jsonify app = Flask(__name__) users = [ User(id=1, username='user1', password='password1'), User(id=2, username='user2', password='password2') ] @app.route('/login', methods=['POST']) def login(): auth = request.authorization if not auth or not auth.username or not auth.password: return jsonify({'message': 'Could not verify'}), 401 user = next((u for u in users if u.username == auth.username and u.password == auth.password), None) if user is None: return jsonify({'message': 'User not found'}), 401 token = generate_jwt(user) return jsonify({'token': token}) if __name__ == '__main__': app.run(debug=True)
这样我们就完成了一个简单的基于JWT的统一身份认证系统的搭建与演示。
本站知识库部分内容及素材来源于互联网,如有侵权,联系必删!
标签:统一身份认证