指南Python 3 中的令牌端点

本文介绍了一个简单的 令牌端点 示例,用于创建在 python 中实现的 JSON Web 令牌 (JWT)。令牌由 CKEditor 云服务用于对用户进行身份验证。

# 依赖项

所有代码示例都使用 pyjwtFlaskFlask-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')

accessKeyenvironmentId 应替换为 CKEditor 生态系统客户仪表板 为 SaaS 提供的密钥,或由 管理面板 为本地部署应用程序提供的密钥。用户数据可以从会话或数据库中获取。

然后,您应该将令牌传递给客户端,例如通过发送纯文本字符串或通过渲染包含此令牌的页面。如果用户未经身份验证,令牌端点应返回错误或重定向到登录页面。此外,您应确保通过加密通道发送令牌。

# 易于成像、导出为 PDF 以及导入和导出为 Word

用于易于成像和导出为 Word/PDF 功能的令牌端点不需要添加用户数据。因此,您可以在令牌有效负载中跳过 userauth 属性。

# 本地部署的导出为 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