统一身份认证系统
统一身份认证系统
在线试用
统一身份认证系统
解决方案下载
统一身份认证系统
源码授权
统一身份认证系统
产品报价
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
小明:明白了,这样的系统确实能提升校园管理效率。

小李:是的,而且安全性也更高。