DanXi icon indicating copy to clipboard operation
DanXi copied to clipboard

[Feature Request] WebVPN 代理支持

Open w568w opened this issue 1 year ago • 16 comments

你想要什么样的功能? 由于假期学生离校,需要接入 webvpn 代理以入校访问。

如何实现? 这不难实现,只需将请求的目标 URL 改为对应的 webvpn 版本即可。可以参考:

https://github.com/DanXi-Dev/DanXi-swift/blob/e5a2b542dc7a02f744f97b90d732740194161c36/Fudan%20Kit/Classroom/ClassroomAPI.swift#L57-L60

w568w avatar Jun 25 '24 13:06 w568w

喜欢assign

ivanfei-1 avatar Jun 29 '24 12:06 ivanfei-1

图片上传下载也需加入webvpn功能

ppolariss avatar Jun 30 '24 08:06 ppolariss

图片上传下载也需加入 webvpn 功能

自然是包括所有服务的。

w568w avatar Jun 30 '24 08:06 w568w

很久之前逆向的webvpn,不知道是否还有效:https://github.com/Limour-dev/daily_fudan_core/blob/main/FDU_WebVPN.py

Limour-dev avatar Jun 30 '24 20:06 Limour-dev

从目前来看,webvpn 承载能力极其有限,开服时部分用户报告 webvpn 服务器直接无法访问。加入该功能后可能可用性不高。

@fsy2001 是否有必要急着加入 webvpn,还是继续使用 easyconnect?需要商榷。

w568w avatar Jul 02 '24 03:07 w568w

从目前来看,webvpn 承载能力极其有限,开服时部分用户报告 webvpn 服务器直接无法访问。加入该功能后可能可用性不高。

@fsy2001 是否有必要急着加入 webvpn,还是继续使用 easyconnect?需要商榷。

否定的,我在所有的环境下使用内置的webvpn服务从基本未出现不稳定的情况,swift目前的做法是自动切换并且给用户添加手动开关按钮,可以在webvpn宕机时退回ec

ivanfei-1 avatar Jul 02 '24 03:07 ivanfei-1

从目前来看,webvpn 承载能力极其有限,开服时部分用户报告 webvpn 服务器直接无法访问。加入该功能后可能可用性不高。

@fsy2001 是否有必要急着加入 webvpn,还是继续使用 easyconnect?需要商榷。

我认为 webvpn 不足以承载树洞的并发用户量,从 iOS 端的使用体验看,确实有很多用户报告 webvpn 有时无法使用。建议待用户量稳定后做进一步的性能评估。

fsy2001 avatar Jul 02 '24 05:07 fsy2001

建议待用户量稳定后做进一步的性能评估。

那么暂且从 1.4.4 计划中移除。

w568w avatar Jul 02 '24 07:07 w568w

从目前来看,webvpn 承载能力极其有限,开服时部分用户报告 webvpn 服务器直接无法访问。加入该功能后可能可用性不高。 @fsy2001 是否有必要急着加入 webvpn,还是继续使用 easyconnect?需要商榷。

我认为 webvpn 不足以承载树洞的并发用户量,从 iOS 端的使用体验看,确实有很多用户报告 webvpn 有时无法使用。建议待用户量稳定后做进一步的性能评估。

最近几天我并没有见到有关webvpn出错的抱怨,“不足以承载并发数据量”缺乏有效的证据。

另一方面,假设有5%的用户(比如fsy2001自己)无法使用webvpn,我们不应为此牺牲另外95%的用户的方便性;另外,对于那5%,即使加了webvpn功能,他们也随时可以退回到ec

ivanfei-1 avatar Jul 10 '24 05:07 ivanfei-1

我们已经确定之前的WebVPN无法使用是因为并发问题引起重复登录导致的,且Bug解决后WebVPN不再出现问题。我认为WebVPN可以继续开发。

需要强调的是,WebVPN似乎不支持PUT方法。

fsy2001 avatar Jul 10 '24 07:07 fsy2001

WebVPN似乎不支持PUT方法。

那 Swift 端现在如何利用 WebVPN 访问论坛?我印象里还是有一些 PUT 方法的。

w568w avatar Jul 10 '24 08:07 w568w

不作特别处理。PUT方法的使用频率不高,不涉及到浏览和发帖等关键步骤,只在一些低频场景使用,包括更新置顶贴、标记敏感贴、更新回复和修改密码等。

fsy2001 avatar Jul 10 '24 09:07 fsy2001

更新回复

这个还是比较重要的。

@JingYiJun 后端能否提供替代接口?例如 PUT /floor <=> POST /floor/put,后者直接调用前者的 handler。

w568w avatar Jul 10 '24 13:07 w568w

see OpenTreeHole/treehole_next#155

JingYiJun avatar Jul 11 '24 03:07 JingYiJun

后端已完成

JingYiJun avatar Jul 11 '24 12:07 JingYiJun

see OpenTreeHole/treehole_next#155

此条信息中的修改已过时,目前为所有PUT方法添加了PATCH方法的兼容API,URL path加上 _webvpn 后缀即可。

例如:PUT /api/floor 改为 PATCH /api/floor/_webvpn

fsy2001 avatar Aug 04 '24 09:08 fsy2001

目前,我们的登录逻辑是对于每个复旦站点登录一次,并从不缓存 Cookie。根据 @HydrogenC 的反馈,在登录 WebVPN 之后,再通过 WebVPN 重新登录其他复旦站点,可能会触发 UIS 的异地登录防护(因为自己将自己“顶号”了),导致无法正常继续使用 WebVPN。

为了解决这一点,需要首先解决 #426。

w568w avatar Nov 16 '24 17:11 w568w

目前,我们的登录逻辑是对于每个复旦站点登录一次,并从不缓存 Cookie。根据 @HydrogenC 的反馈,在登录 WebVPN 之后,再通过 WebVPN 重新登录其他复旦站点,可能会触发 UIS 的异地登录防护(因为自己将自己“顶号”了),导致无法正常继续使用 WebVPN。

为了解决这一点,需要首先解决 #426。

Nonetheless, I believe that the problem is unrelated with this. I tried to comment out all login requests in the app so that only WebVpnProxy could make login requests to UIS. However, the problem still exists, the POST request to refresh the jwt token still fails always. I would propose to test with another Dart web client framework as another possible attempt to address the problem.

HydrogenC avatar Nov 18 '24 00:11 HydrogenC

I tried to comment out all login requests in the app so that only WebVpnProxy could make login requests to UIS. However, the problem still exists, the POST request to refresh the jwt token still fails always.

That sounds almost despairing. Anyway, I suggest you to:

  1. Reproduce the problematic and correct request;
  2. Compare their (a) HTTP Headers, (b) HTTP Payload and (c) HTTP Cookies one by one. If you are not sure, would you mind posting them here?

w568w avatar Nov 18 '24 12:11 w568w

I tried to comment out all login requests in the app so that only WebVpnProxy could make login requests to UIS. However, the problem still exists, the POST request to refresh the jwt token still fails always.

That sounds almost despairing. Anyway, I suggest you to:

  1. Reproduce the problematic and correct request;
  2. Compare their (a) HTTP Headers, (b) HTTP Payload and (c) HTTP Cookies one by one. If you are not sure, would you mind posting them here?

Yeah I'm planning to try transferring the cookies obtained by loginUIS to another Http framework (and perhaps in another language) to test out the true cause.

HydrogenC avatar Nov 19 '24 12:11 HydrogenC

@w568w I'm working on a 三创 project lately and may not be able to inspect this until half a month (appox.) later. So maybe I should be de-assigned for now?

HydrogenC avatar Nov 25 '24 08:11 HydrogenC

@w568w I'm working on a 三创 project lately and may not be able to inspect this until half a month (appox.) later. So maybe I should be de-assigned for now?

Just do it.

w568w avatar Nov 25 '24 08:11 w568w

@w568w I'm working on a 三创 project lately and may not be able to inspect this until half a month (appox.) later. So maybe I should be de-assigned for now?

Just do it.

I'm working on it now since I've already figured out the exact problem and its solution, I could be assigned back.

HydrogenC avatar Nov 25 '24 13:11 HydrogenC