构建统一身份认证系统及其演示
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的统一身份认证系统的搭建与演示。
本站知识库部分内容及素材来源于互联网,如有侵权,联系必删!
标签:统一身份认证

