如何处理ONLYOFFICE文档服务器与Java Web应用间的安全认证和授权?
处理 ONLYOFFICE 文档服务器与 Java Web 应用之间的安全认证和授权,通常涉及以下几个关键步骤和技术:
1. JWT (JSON Web Token) 认证
-
启用 JWT:
- ONLYOFFICE 文档服务器使用 JWT 来保护文档免受未经授权的访问。从 ONLYOFFICE Docs v.7.2 开始,默认启用 JWT,并自动生成密钥。
- 在 ONLYOFFICE 文档服务器的配置文件
local.json
中,确保 JWT 启用,并设置密钥。
{"services": {"CoAuthoring": {"token": {"enable": {"request": {"inbox": true,"outbox": true},"browser": true}},"secret": {"inbox": {"string": "yoursecret"},"outbox": {"string": "yoursecret"},"session": {"string": "yoursecret"}}}} }
-
生成 JWT:
- 在 Java Web 应用中,使用相同的密钥生成 JWT,并将其添加到发送给 ONLYOFFICE 文档服务器的配置中。
- JWT 需要包含文档的相关信息,例如文档 ID、用户权限等。
-
验证 JWT:
- ONLYOFFICE 文档服务器在接收到请求时,会验证 JWT 的有效性,确保请求的合法性。
2. 生成认证 Token
-
创建认证 Token:
-
ONLYOFFICE 提供 API 认证方式,通过生成一个 Token 并在 HTTP 请求头中传递来实现。
-
Token 的格式如下:
ASC pkey : datetime : hash
其中
pkey
是一个随机字符串,datetime
是 UTC 时间,hash
是使用 HMAC-SHA1 算法计算出的哈希值。
-
-
示例代码 (Java):
import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.Base64;public class OnlyOfficeAuth {public static String createAuthToken(String pkey, String machinekey) throws Exception {OffsetDateTime date = OffsetDateTime.now(ZoneOffset.UTC);String time = date.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));String data = time + "\n" + pkey;SecretKeySpec signingKey = new SecretKeySpec(machinekey.getBytes(), "HmacSHA1");Mac mac = Mac.getInstance("HmacSHA1");mac.init(signingKey);String hash = Base64.getUrlEncoder().encodeToString(mac.doFinal(data.getBytes()));return String.format("ASC %1$s:%2$s:%3$s", pkey, time, hash);} }
-
传递 Token:
- 将生成的 Token 放在 HTTP 请求的
Authorization
头部中。
Authorization: ASC pkey:datetime:hash
- 将生成的 Token 放在 HTTP 请求的
3. 权限控制
-
用户角色:
- 在 Java Web 应用中,定义不同的用户角色(例如管理员、编辑者、查看者),并为每个角色分配不同的权限。
-
文档权限:
- 根据用户角色和文档属性,动态生成 ONLYOFFICE 编辑器的配置。例如,只允许编辑者修改文档,查看者只能查看文档内容。
-
配置示例:
Config config = new Config(); config.setDocumentId(documentId); config.setMode(mode); // "edit" or "view" config.setPermissions(permissions); // 设置用户权限
4. Callback 处理
- 验证 Callback:
- ONLYOFFICE 文档服务器会通过 Callback URL 将文档的编辑状态和结果通知给 Java Web 应用。
- 在 Callback 处理程序中,验证请求的来源和 JWT 的有效性,确保请求的安全性。
- 处理逻辑:
- 根据 Callback 的内容,更新文档的状态、保存文档内容等。
5. 安全存储
- 加密存储:
- 对存储在服务器上的文档进行加密,防止未经授权的访问。
- 访问控制:
- 实施严格的访问控制策略,只允许授权用户访问文档。
总结
通过以上步骤,可以实现 ONLYOFFICE 文档服务器与 Java Web 应用之间的安全认证和授权。关键在于使用 JWT 进行身份验证,并结合用户角色和文档权限进行细粒度的权限控制。同时,确保 Callback 处理的安全性,并对存储的文档进行加密和访问控制,以防止未经授权的访问。