MS-WOPI host 简单实现查看/编辑

本文深入解析WebApplicationOpenPlatformInterface(WOPI)协议,阐述其如何为基于Web的服务提供查看和编辑Office文档的功能。通过示例说明客户端如何使用WOPI获取文件内容,并探讨了WOPI在实现文档查看和编辑过程中的关键步骤。
部署运行你感兴趣的模型镜像

Web Application Open Platform Interface (WOPI). WOPI为基于Web的服务提供了一种查看和编辑OfficeWebApps中文档的方法,您可以从Office文档中获得所有高保真和丰富的文档。

概述

客户端如何使用WOPI的一个例子是为特定类型的文件提供基于浏览器的查看器。该客户端使用WOPI获取文件的内容,以便将该内容以浏览器中的网页形式呈现给用户。下图显示了如何工作的示例。

图1 使用WOPI为特定类型的文件提供基于浏览器的查看器

上图中交互过程中一个值得注意的细节是,WOPI服务器提供了“调用WOPI客户端所需的信息”。WOPI客户端提供了一种机制,通过该机制,WOPI服务器可以发现WOPI客户端的能力,以及调用这些功能的方法。(正如部署 Office Online Server中所讲到的../hosting/discovery)下图描述了这种交互:

图2 WOPI 发现

HOST实现查看文档要做什么

CheckFileInfo

简单地说,CheckFileInfo是WOPI应用程序如何获取有关文件和用户对文件的权限的信息的。

它应该有一个如下所示的URL:

http://server/<...>/wopi*/files/<id>?access_token=<token>
get method

这是WOPI应用程序将调用的主要URL,以检索有关文件的信息。您将始终在URL中收到文件ID,因此应用程序可能要求您执行的每个操作都是特定于文件的。所有WOPI操作都需要CheckFileInfo。

WOPI应用程序期望响应体中有一个JSON对象。这个JSON响应可以包含许多可选的值,这些值都在[MS-WOPI]第3.3.5.1.1.2节中讨论过,但它至少需要包括BaseFileName、OwnerId、size和Version。

GetFile

CheckFileInfo提供有关文件的信息,GetFile则返回文件流。它应该有一个如下所示的URL:

http://server/<...>/wopi*/files/<id>/contents?access_token=<token>
get method

当您收到GetFile请求时,您的响应应该包括HTTP响应主体中请求的文件的二进制内容(当然,在您验证了访问令牌和权限之后)。

HOST实现编辑文档要做什么

CheckFileInfo

http://server/<...>/wopi*/files/<id>?access_token=<token>
get method

同样是文件信息检索,但是它应该返回用户是否可以编辑文件的标识,比如UserCanWrite、SupportsUpdate等(具体仍参考[MS-WOPI]第3.3.5.1.1.2节)。

GetFile

同上

PutFile

url和GetFile一样,但是请求方法(request method)不同。

http://server/<...>/wopi*/files/<id>/contents?access_token=<token>
post method

wopi client 获取浏览器编辑的文档的内容,将二进制流发送给该PutFile服务,因此实现的时候,保存该二进制流就行了。

代码实现

可以参考  office online server实现文档的预览编辑

其他需要注意的地方

参考上面代码实现,感觉 wopi host 似乎不太安全。如果别人自己实现了一个wopi host,将host链接作为WopiSrc参数传给我们的OfficeWebApp,我们岂不是消耗了自己服务器的资源给他人做了在线查看/编辑文档服务。

解决办法,就是限制访问:

1. 指定 Office Online Server 能够访问的网站域名白名单。

New-OfficeWebAppsHost -domain "contoso.com"

则限制了只能访问 contoso.com 的 wopi host。具体请参考 Office Online Server PowerShell

2. Office Online Server 服务,一般要暴露外网地址给用户访问来提供预览编辑功能,因此第1点的域名设置是比较推荐的。

参考文档

[MS-WOPI]: Web Application Open Platform Interface Protocol

March 21, 2013  S. D. Oliver  Introducing WOPI

转载于:https://my.oschina.net/tita/blog/2963778

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

3.2.6 Timer Events.............................................................................................. 28 3.2.7 Other Local Events...................................................................................... 28 3.3 WOPI Protocol Server Details............................................................................. 28 3.3.1 Abstract Data Model.................................................................................... 29 3.3.2 Timers ...................................................................................................... 29 3.3.3 Initialization............................................................................................... 29 3.3.4 Higher-Layer Triggered Events ..................................................................... 29 3.3.5 Message Processing Events and Sequencing Rules .......................................... 29 3.3.5.1 HTTP://server//wopi*/files/ ..................................................... 29 3.3.5.1.1 AddActivities................................................................................... 31 3.3.5.1.1.1 Request Body ............................................................................ 31 3.3.5.1.1.2 Response Body .......................................................................... 31 3.3.5.1.1.3 Processing Details...................................................................... 32 3.3.5.1.2 CheckFileInfo .................................................................................. 32 3.3.5.1.2.1 Request Body ............................................................................ 32 3.3.5.1.2.2 Response Body .......................................................................... 32 3.3.5.1.2.3 Processing Details...................................................................... 41 3.3.5.1.3 CheckPolicy .................................................................................... 41 3.3.5.1.3.1 Request Body ............................................................................ 41 3.3.5.1.3.2 Response Body .......................................................................... 41 3.3.5.1.3.3 Processing Details...................................................................... 42 3.3.5.1.4 CheckUserAccess............................................................................. 42 3.3.5.1.4.1 Request Body ............................................................................ 42 3.3.5.1.4.2 Response Body .......................................................................... 43 3.3.5.1.4.3 Processing Details...................................................................... 43 3.3.5.1.5 DeleteFile ....................................................................................... 43 3.3.5.1.5.1 Request Body ............................................................................ 44 3.3.5.1.5.2 Response Body .......................................................................... 44 3.3.5.1.5.3 Processing Details...................................................................... 44 3.3.5.1.6 ExecuteCellStorageRelativeRequest ................................................... 44 3.3.5.1.6.1 Request Body ............................................................................ 45 3.3.5.1.6.2 Response Body .......................................................................... 45 3.3.5.1.6.3 Processing Details...................................................................... 45 3.3.5.1.7 ExecuteCellStorageRequest .............................................................. 45 3.3.5.1.7.1 Request Body ............................................................................ 46 3.3.5.1.7.2 Response Body .......................................................................... 46 3.3.5.1.7.3 Processing Details...................................................................... 46 3.3.5.1.8 GetActivities ................................................................................... 46 3.3.5.1.8.1 Request Body ............................................................................ 46 3.3.5.1.8.2 Response Body .......................................................................... 47 3.3.5.1.8.3 Processing Details...................................................................... 47 3.3.5.1.9 GetFileUserValue ............................................................................. 47 3.3.5.1.9.1 Request Body ............................................................................ 48 3.3.5.1.9.2 Response Body .......................................................................... 48 3.3.5.1.9.3 Processing Details...................................................................... 48
<think>我们正在讨论WOPI协议中access token验证缺失的影响。根据WOPI协议,access token是必需的,用于验证用户对文件的访问权限。如果接口没有加access token验证,会带来一系列安全问题。 关键点: 1. 未验证token意味着任何请求都可以访问文件,导致未授权访问。 2. 具体影响包括:数据泄露、非法修改文件、服务拒绝攻击等。 3. Office Online Server在调用WOPI接口时会传递token,如果服务端不验证,则无法确保操作的安全性。 因此,我们需要详细说明这些影响,并给出可能的后果。</think>### WOPI 接口未添加 Access Token 验证的影响分析 当 WOPI 接口未实现访问令牌验证时,与 Office Online Server (OOS) 集成会导致严重的安全和功能问题: #### 核心安全风险 1. **未授权文件访问** - 任何用户可直接访问所有文件:`https://wopi-host/files/<file_id>/contents` - 攻击者可遍历文件 ID 窃取敏感文档(如 `file_id=1,2,3...`) - **风险等级**:高危数据泄露(符合 GDPR/CCPA 违规情形) 2. **任意文件修改** ```http POST /files/<file_id>/contents HTTP/1.1 Host: wopi-host Content-Type: application/octet-stream [恶意修改的文件内容] ``` - 无需验证即可覆盖任意文档 - 可能植入勒索软件或后门 #### Office Online 集成故障 1. **编辑会话异常** | 操作阶段 | 错误现象 | |----------|----------| | 打开文件 | 正常打开但无权限提示 | | 保存文件 | 保存成功但实际未写入存储 | | 关闭文件 | 丢失"是否保存"提示 | 2. **版本控制混乱** - 多用户同时编辑同一文件时: - 最后保存者覆盖所有更改(无冲突检测) - 版本历史记录无法关联真实用户 3. **审计功能失效** - 所有操作日志显示为匿名用户: ```log [WOPI] File modified by: anonymous@unknown ``` #### 协议合规性违规 1. **违反 MS-WOPI 规范** - 第 3.3.5.1 节强制要求访问控制 - 第 6.3 节规定必须验证 `X-WOPI-Proof` 签名 2. **认证失败** - 无法通过 Microsoft 的 [WOPI 验证工具](https://learn.microsoft.com/zh-cn/microsoft-365/enterprise/office-online-server-validation-tool)测试 - 企业版部署时触发证书吊销 #### 解决方案建议 1. **立即修复** ```python # WOPI 接口基础验证示例 def wopi_endpoint(request, file_id): token = request.headers.get('X-WOPI-Proof') or request.GET.get('access_token') if not validate_token(token, file_id): # 必须实现验证函数 return HttpResponse(status=401, headers={'X-WOPI-Error': 'invalid_token'}) # 后续处理... ``` 2. **应急措施** - 在反向代理层临时拦截: ```nginx location ~ ^/wopi/files/ { if ($http_x_wopi_proof = "") { return 401; } proxy_pass http://wopi_backend; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值