From 8802e68106cb5f3590e0aaaf2dd3df77001d5e53 Mon Sep 17 00:00:00 2001 From: Leo Date: Thu, 15 Jan 2026 20:21:13 +0800 Subject: [PATCH] 1 --- doc/WPS365回调地址配置说明.md | 119 ++++++++++++++++++ .../service/impl/WPS365OAuthServiceImpl.java | 16 ++- 2 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 doc/WPS365回调地址配置说明.md diff --git a/doc/WPS365回调地址配置说明.md b/doc/WPS365回调地址配置说明.md new file mode 100644 index 0000000..430a9ef --- /dev/null +++ b/doc/WPS365回调地址配置说明.md @@ -0,0 +1,119 @@ +# WPS365 回调地址配置说明 + +## 错误信息 + +如果遇到以下错误: +```json +{ + "code": 40000001, + "msg": "invalid_request", + "debug": { + "desc": "The 'redirect_uri' parameter does not match any of the OAuth 2.0 Client's pre-registered redirect urls." + } +} +``` + +**原因**:`redirect_uri` 参数与WPS365开放平台配置的回调地址不一致。 + +## 解决方案 + +### 1. 检查当前配置的回调地址 + +查看 `application.yml` 中的配置: +```yaml +wps365: + redirect-uri: https://jarvis.van333.cn/wps365-callback +``` + +### 2. 在WPS365开放平台配置回调地址 + +1. **登录WPS365开放平台** + - 访问:https://open.wps.cn/ + - 进入你的应用管理页面 + +2. **找到"安全设置"或"回调配置"** + - 通常在"开发配置" > "安全设置" 或 "事件与回调" 中 + +3. **配置授权回调地址** + - 回调地址必须与配置文件中的 `redirect-uri` **完全一致** + - 包括: + - ✅ 协议:`https://`(不能是 `http://`) + - ✅ 域名:`jarvis.van333.cn`(不能有 `www` 或其他前缀) + - ✅ 路径:`/wps365-callback`(不能有多余的斜杠) + - ✅ 端口:如果使用默认端口443,不需要写端口号 + +4. **正确的配置示例** + ``` + https://jarvis.van333.cn/wps365-callback + ``` + +5. **错误的配置示例(会导致错误)** + ``` + ❌ http://jarvis.van333.cn/wps365-callback (协议错误) + ❌ https://www.jarvis.van333.cn/wps365-callback (域名不一致) + ❌ https://jarvis.van333.cn/wps365-callback/ (末尾多斜杠) + ❌ https://jarvis.van333.cn:443/wps365-callback (端口号多余) + ❌ https://jarvis.van333.cn/jarvis/wps365/oauth/callback (路径不一致) + ``` + +### 3. 验证回调地址 + +配置完成后,WPS365平台会发送一个challenge验证请求到你的回调地址。确保: +- ✅ 回调接口支持GET和POST请求 +- ✅ 能正确处理challenge参数并返回 +- ✅ 接口可以正常访问(不被防火墙拦截) + +### 4. 常见问题排查 + +#### 问题1:配置了但验证失败 +- 检查回调接口是否支持POST请求 +- 检查是否能正确处理challenge参数 +- 查看后端日志,确认是否收到challenge请求 + +#### 问题2:授权时提示redirect_uri不匹配 +- 检查WPS365平台配置的回调地址 +- 检查配置文件中的redirect-uri +- 确保两者完全一致(包括大小写、斜杠等) + +#### 问题3:回调地址访问失败 +- 检查nginx配置是否正确代理 +- 检查前端白名单是否已配置 +- 检查域名DNS解析是否正常 + +### 5. 调试步骤 + +1. **查看后端日志** + ``` + 生成授权URL: https://openapi.wps.cn/oauth2/auth?client_id=xxx&redirect_uri=... + 使用回调地址: https://jarvis.van333.cn/wps365-callback + ``` + +2. **复制日志中的回调地址** + - 确保WPS365平台配置的地址与日志中的地址完全一致 + +3. **测试回调地址** + - 直接在浏览器访问:`https://jarvis.van333.cn/wps365-callback` + - 应该能看到授权页面或提示信息 + +4. **重新授权** + - 修改配置后,重新点击"立即授权" + - 如果还是失败,检查WPS365平台的配置 + +## 配置检查清单 + +- [ ] WPS365开放平台已配置回调地址 +- [ ] 回调地址与配置文件中的redirect-uri完全一致 +- [ ] 回调接口支持GET和POST请求 +- [ ] 回调接口能正确处理challenge验证 +- [ ] 前端白名单已配置 `/wps365-callback` +- [ ] nginx已配置 `/wps365-callback` 路由 +- [ ] 域名DNS解析正常 +- [ ] SSL证书有效 + +## 注意事项 + +1. **回调地址必须使用HTTPS**(生产环境) +2. **路径不能有末尾斜杠**(除非是根路径) +3. **域名必须完全匹配**(不能有www前缀等) +4. **配置后需要等待几分钟生效**(WPS365平台可能有缓存) + 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 0f4efa4..7110dcc 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 @@ -60,12 +60,22 @@ public class WPS365OAuthServiceImpl implements IWPS365OAuthService { StringBuilder authUrl = new StringBuilder(); authUrl.append(oauthUrl); authUrl.append("?client_id=").append(appId); + + // 重要:redirect_uri必须与WPS365开放平台配置的回调地址完全一致 + // 包括协议(https)、域名、路径,不能有多余的斜杠 + String finalRedirectUri = redirectUri.trim(); + // 确保URL末尾没有斜杠(除非是根路径) + if (finalRedirectUri.endsWith("/") && !finalRedirectUri.equals("https://")) { + finalRedirectUri = finalRedirectUri.substring(0, finalRedirectUri.length() - 1); + } + try { - String encodedRedirectUri = java.net.URLEncoder.encode(redirectUri, "UTF-8"); + String encodedRedirectUri = java.net.URLEncoder.encode(finalRedirectUri, "UTF-8"); authUrl.append("&redirect_uri=").append(encodedRedirectUri); + log.info("使用回调地址: {} (编码后: {})", finalRedirectUri, encodedRedirectUri); } catch (java.io.UnsupportedEncodingException e) { log.error("URL编码失败", e); - authUrl.append("&redirect_uri=").append(redirectUri); + authUrl.append("&redirect_uri=").append(finalRedirectUri); } authUrl.append("&response_type=code"); // WPS365的scope,根据官方文档设置 @@ -80,6 +90,8 @@ public class WPS365OAuthServiceImpl implements IWPS365OAuthService { String result = authUrl.toString(); log.info("生成授权URL: {}", result); + log.warn("⚠️ 请确保WPS365开放平台配置的回调地址与以下地址完全一致(包括协议、域名、路径):"); + log.warn("⚠️ 回调地址: {}", finalRedirectUri); return result; }