在现代企业环境中,多个独立的系统需要共享用户的认证信息。为了简化这一过程,采用“统一身份认证”是一种高效的方式。本文将介绍如何使用OAuth2协议结合JWT(JSON Web Token)来构建一个跨系统的用户认证解决方案。
首先,我们需要定义一个授权服务器(Authorization Server),它负责验证用户的身份并发放访问令牌。以下是一个简单的Python Flask应用作为授权服务器:
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 == 'password': token = jwt.encode({'user': username}, SECRET_KEY, algorithm='HS256') return jsonify({'token': token}), 200 else: return jsonify({'error': 'Invalid credentials'}), 401 if __name__ == '__main__': app.run(debug=True)
接下来,每个客户端应用程序需要配置自己的资源服务器(Resource Server),用来接收来自授权服务器的访问令牌,并验证其合法性:
@app.route('/protected') def protected(): token = request.headers.get('Authorization').split()[1] try: payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256']) return jsonify({'message': f'Hello {payload["user"]}'}), 200 except jwt.ExpiredSignatureError: return jsonify({'error': 'Token expired'}), 401 except jwt.InvalidTokenError: return jsonify({'error': 'Invalid token'}), 401
这种架构确保了所有系统共享同一个认证流程,避免了重复开发。同时,利用JWT无状态的特点,可以轻松扩展到分布式环境。
总结来说,“统一身份认证”不仅提高了用户体验,还增强了系统的安全性。上述代码展示了如何快速搭建起这样一个认证体系。