guideJava 中的令牌端点

本文介绍了用 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);
        }
    }
}

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

然后,您应该将令牌传递到令牌端点的 HTTP 响应中的客户端。在发送令牌之前,不要忘记在您的应用程序中验证用户身份。如果用户未经身份验证,令牌端点应返回错误或重定向到登录页面。您还应确保令牌通过加密通道发送。

# 轻松图片、导出为 PDF 以及导入和导出为 Word

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

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