Python 3 中的令牌端点
本文介绍了一个简单的 令牌端点 示例,用于创建在 python 中实现的 JSON Web 令牌 (JWT)。令牌由 CKEditor 云服务用于对用户进行身份验证。
# 依赖项
所有代码示例都使用 pyjwt、Flask 和 Flask-Cors 库。
如果您使用的是 Python 包索引,您可以在终端中运行以下命令
python3 -m pip install flask flask_cors pyjwt
# 示例
创建用于与 协作 集成的令牌端点时,令牌有效负载应包含环境 ID 和用户数据。
# 实时协作功能
import jwt
from time import time
from flask import Flask
from flask_cors import CORS
accessKey = 'w1lnWEN63FPKxBNmxHN7WpfW2IoYVYca5moqIUKfWesL1Ykwv34iR5xwfWLy'
environmentId = 'LJRQ1bju55p6a47RwadH'
app = Flask(__name__)
CORS(app)
@app.route('/')
def main():
timestamp = int(time())
payload = {
'aud': environmentId,
'iat': timestamp,
'sub': 'user-123',
'user': {
'email': 'joe.doe@example.com',
'name': 'Joe Doe'
},
'auth': {
'collaboration': {
'*': {
'role': 'writer'
}
}
}
}
return jwt.encode(payload, accessKey)
if __name__ == '__main__':
app.run(port='8080')
accessKey
和 environmentId
应替换为 CKEditor 生态系统客户仪表板 为 SaaS 提供的密钥,或由 管理面板 为本地部署应用程序提供的密钥。用户数据可以从会话或数据库中获取。
然后,您应该将令牌传递给客户端,例如通过发送纯文本字符串或通过渲染包含此令牌的页面。如果用户未经身份验证,令牌端点应返回错误或重定向到登录页面。此外,您应确保通过加密通道发送令牌。
# 易于成像、导出为 PDF 以及导入和导出为 Word
用于易于成像和导出为 Word/PDF 功能的令牌端点不需要添加用户数据。因此,您可以在令牌有效负载中跳过 user
和 auth
属性。
# 本地部署的导出为 PDF 以及导入和导出为 Word
用于本地部署的 PDF 转换器和 DOCX 转换器的令牌不需要任何其他声明,因此您可以使用空有效负载创建令牌。
在此实现中,accessKey
已被 SECRET_KEY
替换 - 一个在 导入和导出为 Word/导出为 PDF 本地部署实例安装期间设置的变量。
import jwt
from time import time
from flask import Flask
from flask_cors import CORS
secretKey = 'w1lnWEN63FPKxBNmxHN7WpfW2IoYVYca5moqIUKfWesL1Ykwv34iR5xwfWLy'
app = Flask(__name__)
CORS(app)
@app.route('/')
def main():
timestamp = int(time())
payload = {
'iat': timestamp
}
return jwt.encode( payload, secretKey)
if __name__ == '__main__':
app.run(port='8080')
如果您创建自己的令牌端点,请不要忘记在发送令牌之前对用户进行身份验证。
# 用法
通过运行以下命令启动服务器
python index.py
现在,您可以通过一个简单的请求获取令牌
https://127.0.0.1:8080/
# 示例响应
响应应为纯文本格式。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJMSlJRMWJqdTU1cDZhNDdSd2FkSCIsImlhdCI6MTY0ODgwNzY2Miwic3ViIjoidXNlci0xMjMiLCJ1c2VyIjp7ImVtYWlsIjoiam9lLmRvZUBleGFtcGxlLmNvbSIsIm5hbWUiOiJKb2UgRG9lIn0sImF1dGgiOnsiY29sbGFib3JhdGlvbiI6eyIqIjp7InJvbGUiOiJ3cml0ZXIifX19fQ.QZLzRz9SF8JP2zK9vENewmD75Og6z1a83fDt5SXuLF4
# 调试
出于调试目的,可以使用 jwt.io。