diff --git a/doc/WPS365授权错误排查指南.md b/doc/WPS365授权错误排查指南.md index a626443..8ff6fb5 100644 --- a/doc/WPS365授权错误排查指南.md +++ b/doc/WPS365授权错误排查指南.md @@ -98,9 +98,9 @@ 1. 登录WPS365开放平台 2. 进入"开发配置" > "权限管理" 3. 查看已申请的权限列表,**注意权限的格式**: - - 可能是 `file.read`(点分隔) - - 可能是 `file:read`(冒号分隔) - - 可能是其他格式 + - 必须以 `kso.` 开头,如:`kso.file.read`、`kso.file.readwrite` + - 不是 `file.read` 或 `ksheet.read`(这些格式不存在) + - 根据官方文档:https://open.wps.cn/documents/app-integration-dev/wps365/server/ #### 5.2 检查scope分隔符 @@ -108,9 +108,9 @@ | 分隔符 | 示例 | 说明 | |--------|------|------| -| **逗号(正确)** | `kso.doclib.readwrite,ksheet.read` | ✅ WPS365官方要求 | -| **空格(错误)** | `kso.doclib.readwrite ksheet.read` | ❌ 会导致invalid_scope | -| **逗号+空格** | `kso.doclib.readwrite, ksheet.read` | ⚠️ 可能支持,但不推荐 | +| **逗号(正确)** | `kso.file.readwrite,kso.doclib.readwrite` | ✅ WPS365官方要求 | +| **空格(错误)** | `kso.file.readwrite kso.doclib.readwrite` | ❌ 会导致invalid_scope | +| **逗号+空格** | `kso.file.readwrite, kso.doclib.readwrite` | ⚠️ 可能支持,但不推荐 | **重要**:WPS365官方文档明确要求使用英文逗号 `,` 分隔,不能使用空格。 @@ -122,7 +122,8 @@ wps365: # 根据WPS365平台后台"权限管理"中显示的实际权限名称配置 # 使用英文逗号分隔(WPS365官方要求) - scope: kso.doclib.readwrite + # 权限名称必须以 kso. 开头 + scope: kso.file.readwrite ``` 多个权限示例: @@ -130,7 +131,8 @@ wps365: ```yaml wps365: # 多个权限用英文逗号分隔,不能有空格 - scope: kso.doclib.readwrite,ksheet.read + # 权限名称必须以 kso. 开头 + scope: kso.file.read,kso.file.readwrite ``` #### 5.4 确认权限已申请且名称正确 diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index bd2e313..5ca2f69 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -28,20 +28,24 @@ wps365: # 刷新Token地址 refresh-token-url: https://openapi.wps.cn/oauth2/token # OAuth授权请求的scope权限(可选) - # 如果不配置,默认使用:kso.doclib.readwrite(文档库读写权限) + # 如果不配置,默认使用:kso.file.readwrite(文件读写权限,支持在线表格操作) # # ⚠️ 重要:如果报错invalid_scope,必须按以下步骤操作: # 1. 登录WPS365开放平台:https://open.wps.cn/ # 2. 进入"开发配置" > "权限管理" - # 3. 查看已申请权限的准确名称(注意大小写、分隔符、命名空间等) + # 3. 查看已申请权限的准确名称(必须以 kso. 开头) # 4. 在下方配置scope,使用英文逗号分隔(WPS365官方要求) # - # 根据WPS365官方文档: + # 根据WPS365官方文档(https://open.wps.cn/documents/app-integration-dev/wps365/server/): # - 必须使用英文逗号分隔(不是空格) - # - 权限名称必须与后台显示的完全一致 - # - 常见权限名称可能是:kso.doclib.readwrite, kso.doclib.read 等 + # - 权限名称必须以 kso. 开头,格式如:kso.file.read, kso.file.readwrite + # - 常见权限名称: + # * kso.file.read (文件读取) + # * kso.file.readwrite (文件读写,支持在线表格操作) + # * kso.doclib.readwrite (文档库读写) + # * kso.wiki.readwrite (知识库读写) # # 示例配置(根据平台后台实际显示的权限名称修改): + # scope: kso.file.readwrite + # scope: kso.file.read,kso.file.readwrite # scope: kso.doclib.readwrite - # scope: kso.doclib.readwrite,ksheet.read - # scope: kso.doclib.read diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WPS365OAuthServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WPS365OAuthServiceImpl.java index cc33c13..0d7e7e8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WPS365OAuthServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WPS365OAuthServiceImpl.java @@ -94,22 +94,26 @@ public class WPS365OAuthServiceImpl implements IWPS365OAuthService { // scope参数(必需,根据WPS365官方文档) // 优先使用配置文件中指定的scope,如果没有配置则使用默认值 // 重要:WPS365官方文档明确要求使用英文逗号分隔,且权限名称必须与后台注册的完全一致 + // 根据官方文档:https://open.wps.cn/documents/app-integration-dev/wps365/server/ + // 权限名称格式为:kso.xxx.read 或 kso.xxx.readwrite(不是 file.read) String scope = wps365Config.getScope(); if (scope == null || scope.trim().isEmpty()) { // 默认scope,根据WPS365官方文档: // 1. 必须使用英文逗号分隔(不是空格) - // 2. 权限名称必须与WPS365平台后台"权限管理"中显示的完全一致 - // 3. 常见权限名称可能是: + // 2. 权限名称必须以 kso. 开头,格式如:kso.file.read, kso.file.readwrite + // 3. 常见权限名称(根据官方文档): + // - kso.file.read (文件读取) + // - kso.file.readwrite (文件读写) // - kso.doclib.readwrite (文档库读写) - // - kso.doclib.read (文档库读取) - // - 或其他在平台后台显示的实际权限名称 + // - kso.wiki.readwrite (知识库读写) + // - 对于在线表格(AirSheet/KSheet),可能需要 kso.file.readwrite // // 如果报错invalid_scope,请: - // 1. 登录WPS365开放平台 + // 1. 登录WPS365开放平台:https://open.wps.cn/ // 2. 进入"开发配置" > "权限管理" - // 3. 查看已申请权限的准确名称(注意大小写、分隔符等) + // 3. 查看已申请权限的准确名称(必须以 kso. 开头) // 4. 在application.yml中配置scope参数,使用逗号分隔 - scope = "kso.doclib.readwrite"; // 默认使用文档库读写权限 + scope = "kso.file.readwrite"; // 默认使用文件读写权限(支持在线表格操作) } scope = scope.trim();