python token 单点登录
时间: 2023-11-05 13:02:27 浏览: 33
Python Token 单点登录是一种用于用户身份验证和授权的技术。它通过使用一个令牌(token)来代替传统的用户名和密码方式,使得用户只需要在登录时输入一次用户名和密码,就可以访问多个应用程序。
在 Python 中,可以使用轻量级的 Web 框架 Flask 来实现 Token 单点登录。具体步骤如下:
1. 安装 Flask 和 Flask-JWT 库:
```
pip install flask
pip install flask-jwt
```
2. 创建一个 Flask 应用程序,并设置一个 secret_key 用于加密 token:
```python
from flask import Flask
from flask_jwt import JWT, jwt_required, current_identity
from werkzeug.security import safe_str_cmp
app = Flask(__name__)
app.config['SECRET_KEY'] = 'super-secret'
# 定义用户对象
class User(object):
def __init__(self, id, username, password):
self.id = id
self.username = username
self.password = password
def __str__(self):
return "User(id='%s')" % self.id
# 定义用户列表
users = [
User(1, 'user1', 'password1'),
User(2, 'user2', 'password2')
]
# 定义认证函数
def authenticate(username, password):
user = next((user for user in users if user.username == username), None)
if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')):
return user
# 定义身份载荷函数
def identity(payload):
user_id = payload['identity']
return next((user for user in users if user.id == user_id), None)
# 初始化 JWT
jwt = JWT(app, authenticate, identity)
```
3. 定义一个登录接口,该接口将用户名和密码作为参数,验证用户身份,并返回一个 token:
```python
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
user = authenticate(username, password)
if user:
token = jwt.jwt_encode_callback({'identity': user.id})
return jsonify({'token': token.decode('utf-8')})
else:
return jsonify({'error': 'Invalid username or password'}), 401
```
4. 定义一个受保护的接口,该接口需要验证 token:
```python
@app.route('/protected')
@jwt_required()
def protected():
return jsonify({'user': str(current_identity)})
```
这个接口只有在请求头部包含有效的 token 时才会返回数据。
5. 运行 Flask 应用程序:
```python
if __name__ == '__main__':
app.run(debug=True)
```
现在,你可以使用 Postman 或其他工具来测试这个应用程序了。首先调用 /login 接口获取 token,然后使用获取到的 token 访问 /protected 接口即可。
以上就是使用 Python 实现 Token 单点登录的基本步骤。当然,实际应用中还需要解决一些安全问题,例如 token 的有效期、token 的存储方式等。