统一身份认证系统

统一身份认证系统
在线试用

统一身份认证系统
解决方案下载

统一身份认证系统
源码授权

统一身份认证系统
产品报价
25-8-02 08:51
小明:嘿,小李,你最近在研究什么?
小李:我在做一个校园统一身份认证平台的项目。
小明:哦,这个听起来挺复杂的。能说说具体是怎么做的吗?
小李:当然可以。我们使用的是OAuth2.0协议来实现单点登录(SSO)。这样学生和老师只需要一次登录,就能访问多个校园系统。
小明:那你们是怎么处理用户身份验证的呢?
小李:我们用了一个中央认证服务器,所有系统的登录请求都会被重定向到这个服务器。一旦认证成功,就会返回一个令牌(token),后续请求都带上这个令牌即可。
小明:有没有具体的代码示例?
小李:当然有。比如,这是认证服务器生成令牌的代码:
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(): username = request.json.get('username') password = request.json.get('password') # 这里应该连接数据库验证用户名和密码 if username == 'admin' and password == '123456': payload = { 'username': username, 'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1) } token = jwt.encode(payload, SECRET_KEY, algorithm='HS256') return jsonify({'token': token}) else: return jsonify({'error': 'Invalid credentials'}), 401 if __name__ == '__main__': app.run(debug=True)
小明:这代码看起来不错。那客户端怎么验证这个token呢?
小李:客户端每次请求资源时都需要带上这个token,服务端会验证token的有效性。例如:
@app.route('/profile') def profile(): token = request.headers.get('Authorization') if not token: return jsonify({'error': 'Missing token'}), 401 try: payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256']) return jsonify({'username': payload['username']}) except jwt.ExpiredSignatureError: return jsonify({'error': 'Token expired'}), 401 except jwt.InvalidTokenError: return jsonify({'error': 'Invalid token'}), 401
小明:明白了,这样的系统确实能提升校园管理效率。
小李:是的,而且安全性也更高。