PHP 中的令牌端点
本文介绍了在 PHP 中实现的用于创建 JSON Web 令牌 (JWT) 的简单令牌端点示例。CKEditor 云服务使用这些令牌来验证用户身份。
# 依赖项
两个示例都使用firebase/php-jwt库来创建令牌。
composer require firebase/php-jwt
# 示例
在创建用于与协作集成的令牌端点时,令牌有效载荷应包含环境 ID 和用户数据。
# 实时协作功能
<?php
require __DIR__ . '/vendor/autoload.php';
use \Firebase\JWT\JWT;
$accessKey = 'w1lnWEN63FPKxBNmxHN7WpfW2IoYVYca5moqIUKfWesL1Ykwv34iR5xwfWLy';
$environmentId = 'LJRQ1bju55p6a47RwadH';
$payload = array(
'aud' => $environmentId,
'iat' => time(),
'sub' => 'user-123',
'user' => array(
'email' => 'joe.doe@example.com',
'name' => 'Joe Doe'
),
'auth' => array(
'collaboration' => array(
'*' => array(
'role' => 'writer',
)
)
)
);
$jwt = JWT::encode($payload, $accessKey, 'HS256');
// Here we are printing the token to the console. In a real usage scenario
// it should be returned in an HTTP response of the token endpoint.
echo $jwt;
?>
$accessKey
和 $environmentId
应替换为由CKEditor 生态系统客户仪表盘(对于 SaaS)或由管理面板(对于本地部署应用程序)提供的密钥。用户数据可以从会话或数据库中获取。
然后,您应将令牌传递给客户端,例如通过发送普通字符串或渲染包含此令牌的页面。如果用户未经身份验证,则令牌端点应返回错误或重定向到登录页面。此外,您应确保通过加密通道发送令牌。
# Easy Image、导出为 PDF 和导入和导出为 Word
Easy Image 和导出为 Word/PDF 功能的令牌端点不需要添加用户数据。因此,您可以跳过令牌有效载荷中的 user
和 auth
属性。
# 本地部署的导出为 PDF 和导入和导出为 Word
本地部署的 PDF 转换器和 DOCX 转换器的令牌不需要任何额外的声明,因此您可以使用空有效载荷创建令牌。
在此实现中,accessKey
已替换为 SECRET_KEY
- 在导入和导出为 Word/导出为 PDF本地部署实例安装期间设置的变量。
<?php
require __DIR__ . '/vendor/autoload.php';
use \Firebase\JWT\JWT;
$secretKey = 'w1lnWEN63FPKxBNmxHN7WpfW2IoYVYca5moqIUKfWesL1Ykwv34iR5xwfWLy';
$payload = array(
'iat' => time()
);
$jwt = JWT::encode($payload, $secretKey, 'HS256');
// Here we are printing the token to the console. In a real usage scenario
// it should be returned in an HTTP response of the token endpoint.
echo $jwt;
?>
如果您创建自己的令牌端点,请不要忘记在发送令牌之前验证用户身份。
# 示例响应
结果应为纯文本格式。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJMSlJRMWJqdTU1cDZhNDdSd2FkSCIsImlhdCI6MTY0OTIyOTQyMiwic3ViIjoidXNlci0xMjMiLCJ1c2VyIjp7ImVtYWlsIjoiam9lLmRvZUBleGFtcGxlLmNvbSIsIm5hbWUiOiJKb2UgRG9lIn0sImF1dGgiOnsiY29sbGFib3JhdGlvbiI6eyIqIjp7InJvbGUiOiJ3cml0ZXIifX19fQ._V-HXKKHU1E-saZxk4JTvgXdh1I7793nCEK91ubSZHY
# 调试
出于调试目的,可以使用jwt.io。