Java 中的令牌端点
本文介绍了用 Java 实现的用于创建 JSON Web Tokens (JWT) 的简单 令牌端点 示例。CKEditor 云服务使用这些令牌来验证用户身份。
# 依赖项
这两个示例都使用 jjwt 库来创建令牌。
有关安装说明,请查看 官方指南。
# 示例
创建与 协作 集成的令牌端点时,令牌有效载荷应包含环境 ID 和用户数据。
# 实时协作功能
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import java.security.Key;
public class Main {
private static String createCSToken(String accessKey, String environmentId) throws UnsupportedEncodingException {
Key key = Keys.hmacShaKeyFor(accessKey.getBytes("ASCII"));
Map<String, Object> payload = new HashMap<>() {{
put("aud", environmentId);
put("iat", System.currentTimeMillis() / 1000);
put("sub", "user-123");
put("user", new HashMap<>() {{
put("email", "joe.doe@example.com");
put("name", "Joe Doe");
}});
put("auth", new HashMap<>() {{
put("collaboration", new HashMap<>() {{
put("*", new HashMap<>() {{
put("role", "writer");
}});
}});
}});
}};
return Jwts.builder().addClaims(payload).signWith(key).compact();
}
public static void main(String[] args) {
String accessKey = "w1lnWEN63FPKxBNmxHN7WpfW2IoYVYca5moqIUKfWesL1Ykwv34iR5xwfWLy";
String environmentId = "LJRQ1bju55p6a47RwadH";
try {
var tokenString = createCSToken(accessKey, environmentId);
// 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.
System.out.println(tokenString);
} catch (Exception exception) {
System.out.println(exception);
}
}
}
accessKey
和 environmentId
应替换为 CKEditor 生态系统客户仪表盘(对于 SaaS)或 管理面板(对于本地部署应用程序)提供的密钥。用户数据可以从会话或数据库中获取。
然后,您应该将令牌传递到令牌端点的 HTTP 响应中的客户端。在发送令牌之前,不要忘记在您的应用程序中验证用户身份。如果用户未经身份验证,令牌端点应返回错误或重定向到登录页面。您还应确保令牌通过加密通道发送。
# 轻松图片、导出为 PDF 以及导入和导出为 Word
轻松图片和导出为 Word/PDF 功能的令牌端点不需要添加用户数据。因此,您可以在令牌有效载荷中跳过 user
和 auth
属性。
# 本地部署的导出为 PDF 以及导入和导出为 Word
本地部署的 PDF 转换器和 DOCX 转换器的令牌不需要任何额外的声明,因此您可以使用空有效载荷创建令牌。
在此实现中,accessKey
已替换为 SECRET_KEY
- 在 导入和导出为 Word / 导出为 PDF 本地部署实例安装期间设置的变量。
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.security.Key;
public class Main {
private static String createCSToken(String secretKey) throws UnsupportedEncodingException {
Key key = Keys.hmacShaKeyFor(secretKey.getBytes("ASCII"));
return Jwts.builder().setIssuedAt(new Date()).signWith(key).compact();
}
public static void main(String[] args) {
String secretKey = "w1lnWEN63FPKxBNmxHN7WpfW2IoYVYca5moqIUKfWesL1Ykwv34iR5xwfWLy";
try {
var tokenString = createCSToken(secretKey);
// 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.
System.out.println(tokenString);
} catch (Exception exception) {
System.out.println(exception);
}
}
}
# 示例响应
结果应为纯文本格式。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJMSlJRMWJqdTU1cDZhNDdSd2FkSCIsImlhdCI6MTY0OTIyOTQyMiwic3ViIjoidXNlci0xMjMiLCJ1c2VyIjp7ImVtYWlsIjoiam9lLmRvZUBleGFtcGxlLmNvbSIsIm5hbWUiOiJKb2UgRG9lIn0sImF1dGgiOnsiY29sbGFib3JhdGlvbiI6eyIqIjp7InJvbGUiOiJ3cml0ZXIifX19fQ._V-HXKKHU1E-saZxk4JTvgXdh1I7793nCEK91ubSZHY
# 调试
出于调试目的,可以使用 jwt.io。