当前位置: 首页 > article >正文

onlyoffice docker启用jwt并生成jwt

一、说明

        本文是docker教程,linux/win的安装版本也类似,只需要修改配置文件中的secrt就可以了【Configuring JWT for ONLYOFFICE Docs - ONLYOFFICE】

二、正文开始

        docker启动时候如果不想使用jwt,加上参数-e JWT_ENABLED=false就可以了,比如:

docker run --name=oo -i -t -d -p 10100:80 --restart=always -e JWT_ENABLED=false 镜像基地址

        如果想使用jwt,防止资源滥用,就这样写:

docker run --name=oo -i -t -d -p 10100:80 --restart=always -e JWT_ENABLED=true -e JWT_SECRET=【这里写自己的秘钥】 镜像地址

        两者的却别在于,开启jwt,并配置秘钥,这里注意,docker不需要修改配置文件,直接使用参数就行,不要修改配置文件,如果修改了local.json,容器重启后就会失效!!!

-e JWT_ENABLED=true 
-e JWT_SECRET=【这里写自己的秘钥】

三、jwt生成方式

 1、首先记住你上面的秘钥

 2、你的config

         一般来说,config是由后端生成好传递给前端的,比如说,生成出来是这个样子的,这个格式将作为jwt的加密体,前端收到后,千万不要修改,千万不要修改!!!!!

{
	"type": "desktop",
	"documentType": "word",
	"historyList": {
		"history": [],
		"currentVersion": "1"
	},
	"document": {
		"title": "【经营】通用合同模板.docx",
		"url": "http://47.94.91.67/demo_file/comment_test.docx",
		"permissions": {
			"print": true,
			"download": true,
			"edit": true
		},
		"attachId": "e932e7bb1e4d449aa9a7d8b403b4b517",
		"fileType": "docx",
		"key": "ccef18593ef90976d4b5d9"
	},
	"editorConfig": {
		"canCoAuthoring": false,
		"customization": {
			"chat": false,
			"about": false,
			"feedback": false,
			"compactHeader": false,
			"displayTitle": true,
			"leftMenu": false,
			"rightMenu": false,
			"autosave": false,
			"compactToolbar": false,
			"forcesave": true,
			"toolbarNoTabs": true,
			"help": false,
			"hideRightMenu": true,
			"plugins": true,
			"logo": {
				"image": "http://192.168.71.162:8083/onlyoffice_logo.png",
				"imageEmbedded": "http://192.168.71.162:8083/only_office_embedded.png",
				"url": "https://oav3.kmxxg.cn/",
				"imageDark": "http://192.168.71.162:8083/onlyoffice_logo.png"
			}
		},
		"mode": "view",
		"callbackUrl": "https://www.onlyoffice.com:443/callback.ashx?from=office-suite",
		"lang": "zh-CN",
		"user": {
			"name": "曹瑞剑雄",
			"id": "104"
		}
	}
}

3、使用jwt加密

        对你生成的config进行加密,比如说你的config像第【2】步一样,这一步也是后端,我用的是java demo:

String config = "{\"type\":\"desktop\",\"documentType\":\"word\",\"historyList\":{\"history\":[],\"currentVersion\":\"1\"},\"document\":{\"title\":\"【经营】通用合同模板.docx\",\"url\":\"http://47.94.91.67/demo_file/comment_test.docx\",\"permissions\":{\"print\":true,\"download\":true,\"edit\":true},\"attachId\":\"e932e7bb1e4d449aa9a7d8b403b4b517\",\"fileType\":\"docx\",\"key\":\"ccef18593ef90976d4b5d9\"},\"editorConfig\":{\"canCoAuthoring\":false,\"customization\":{\"chat\":false,\"about\":false,\"feedback\":false,\"compactHeader\":false,\"displayTitle\":true,\"leftMenu\":false,\"rightMenu\":false,\"autosave\":false,\"compactToolbar\":false,\"forcesave\":true,\"toolbarNoTabs\":true,\"help\":false,\"hideRightMenu\":true,\"plugins\":true,\"logo\":{\"image\":\"http://192.168.71.162:8083/onlyoffice_logo.png\",\"imageEmbedded\":\"http://192.168.71.162:8083/only_office_embedded.png\",\"url\":\"https://oav3.kmxxg.cn/\",\"imageDark\":\"http://192.168.71.162:8083/onlyoffice_logo.png\"}},\"mode\":\"view\",\"callbackUrl\":\"https://www.onlyoffice.com:443/callback.ashx?from=office-suite\",\"lang\":\"zh-CN\",\"user\":{\"name\":\"曹瑞剑雄\",\"id\":\"104\"}}}";
JSONObject jsonObject = JSONUtil.parseObj(config);
String tokenSecret = "你的秘钥";
Map<String, Object> payloadClaims = BeanUtil.beanToMap(jsonObject);
String token = "";
try {
     Signer signer = HMACSigner.newSHA256Signer(tokenSecret);
     JWT jwt = new JWT();
     for (String key : payloadClaims.keySet()) {
         jwt.addClaim(key, payloadClaims.get(key));
     }
     token = JWT.getEncoder().encode(jwt, signer);
} catch (Exception e) {
     token = "";
}

4、token生成使用

        token生成后,set 进去你的 config 中,然后把新的 config 返回给前端就可以了,比如:

 5、前端使用方式

        前端拿到这个config后,在初始化only的时候不建议修改里面的内容,会导致jwt解析与传入的config不一致导致验证失败。所以拿到内容后直接初始化即可。

        

四、后端用到的 jwt 插件

<dependency>
    <groupId>com.inversoft</groupId>
    <artifactId>prime-jwt</artifactId>
    <version>1.3.1</version>
</dependency>


http://www.kler.cn/news/366185.html

相关文章:

  • 【elkb】linux麒麟v10安装ELKB 8.8.X版本(ARM架构)
  • Java进阶篇设计模式之一 ----- 单例模式
  • django5入门【03】新建一个hello界面
  • 3D图片动画效果组件封装
  • vue3使用webSocket
  • 求刚体移动后的转换矩阵
  • 机器学习与金融风控项目篇-day03-业务规则挖掘与特征构建-特征衍生
  • 探索 Lombok 的 @Builder 和 @SuperBuilder:避坑指南(一)
  • Windows10搭建Spark3.4.3安装教程
  • OAK相机的RGB-D彩色相机去畸变做对齐
  • 【动态规划】【简单多状态dp问题】买卖股票相关问题(冷冻期、手续费、限制次数)
  • MATLAB基础应用精讲-【数模应用】本量利分析(Cost-Volume-Profit Analysis)
  • 【论文阅读】ESRGAN+
  • 项目管理软件中这6个小技巧帮助项目经理同时管理多个项目
  • 水轮发电机油压自动化控制系统解决方案介绍
  • LDR6020:为VR串流线方案注入高效能与稳定性
  • 多台NFS客户端访问一台nfs服务器
  • vitepress一键push和发布到github部署网站脚本
  • spring整合使用xml方式整合Druid数据源连接池
  • 邮件系统SSL加密传输,保护你的电子邮件免受网络威胁
  • 基于SSM考研助手系统的设计
  • 小白对时序数据库的理解
  • 视频美颜平台是如何搭建的?基于直播美颜SDK源码的开发技术详解
  • 推荐一款三维数值建模软件:3DEC
  • C++ —— 《模板进阶详解》,typename和class的用法,非类型模板参数,模板的特化,模板的分离编译
  • 解决Github下载速度慢的问题