Skip to content

feat(drivers/123_open): support 123 official app api#2293

Merged
xrgzs merged 10 commits intomainfrom
dev-123app
Apr 3, 2026
Merged

feat(drivers/123_open): support 123 official app api#2293
xrgzs merged 10 commits intomainfrom
dev-123app

Conversation

@PIKACHUIM
Copy link
Copy Markdown
Member

@PIKACHUIM PIKACHUIM commented Apr 1, 2026

Description / 描述

支持了123云盘提供的OpenList 官方APP API接口

Motivation and Context / 背景

解决#2235

How Has This Been Tested? / 测试

  1. 前往https://api.oplist.org/ 选择123跳转登录 认证登录
  2. 添加123 Open,并勾选UseOnlineAPI 填写Token
  3. 测试刷新是否正常

Checklist / 检查清单

  • I have read the CONTRIBUTING document.
    我已阅读 CONTRIBUTING 文档。
  • I have formatted my code with go fmt or prettier.
    我已使用 go fmtprettier 格式化提交的代码。
  • I have added appropriate labels to this PR (or mentioned needed labels in the description if lacking permissions).
    我已为此 PR 添加了适当的标签(如无权限或需要的标签不存在,请在描述中说明,管理员将后续处理)。
  • I have requested review from relevant code authors using the "Request review" feature when applicable.
    我已在适当情况下使用"Request review"功能请求相关代码作者进行审查。
  • I have updated the repository accordingly (If it’s needed).
    我已相应更新了相关仓库(若适用)。

@PIKACHUIM PIKACHUIM self-assigned this Apr 1, 2026
@PIKACHUIM PIKACHUIM added the Module: Driver Driver-Related Issue/PR label Apr 1, 2026
@PIKACHUIM PIKACHUIM linked an issue Apr 1, 2026 that may be closed by this pull request
9 tasks
@xrgzs
Copy link
Copy Markdown
Member

xrgzs commented Apr 1, 2026

文档可以更新一下

Copy link
Copy Markdown
Member

@xrgzs xrgzs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_refreshToken 没有被调用,应该将其迁移到 token.go

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>
@xrgzs xrgzs changed the title feat(driver): support 123 official app api feat(drivers/123_open): support 123 official app api Apr 1, 2026
@Suyunmeng
Copy link
Copy Markdown
Contributor

该PR需等待 OpenListTeam/OpenList-APIPages#81 合并后方可合并至主分支

Suyunmeng
Suyunmeng previously approved these changes Apr 1, 2026
@PIKACHUIM PIKACHUIM requested a review from xrgzs April 2, 2026 02:25
@Suyunmeng Suyunmeng force-pushed the main branch 4 times, most recently from a31fd53 to 7bea29c Compare April 2, 2026 17:27
@xrgzs xrgzs merged commit 9fdba3a into main Apr 3, 2026
12 checks passed
@xrgzs xrgzs deleted the dev-123app branch April 3, 2026 07:23
@WangEdward
Copy link
Copy Markdown
Contributor

請問為什麼加了新 api 直接把 oauth2 刪了。。。有沒有可能部分使用者有自己的三方應用 @Suyunmeng

@Suyunmeng
Copy link
Copy Markdown
Contributor

Suyunmeng commented Apr 9, 2026

請問為什麼加了新 api 直接把 oauth2 刪了。。。有沒有可能部分使用者有自己的三方應用 @Suyunmeng

没有删除,原开发者ClientID和ClientSecret登录方式依旧保留的,123对普通开发者的AccessToken获取目前限制为只能通过ClientID和ClientSecret获取,具体请看123官方文档的相关描述,如果您已向123申请到第三方挂载应用的ClientID和ClientSecret,且想使用自己的这个应用进行Oauth2授权来获取RefreshToken和AccessToken注册驱动,可通过自行部署API来实现

@WangEdward
Copy link
Copy Markdown
Contributor

如果您已向123申请到第三方挂载应用的ClientID和ClientSecret,且想使用自己的这个应用进行Oauth2授权来获取RefreshToken和AccessToken注册驱动,可通过自行部署API来实现

这在之前版本是一个开箱即用的功能,现在变成需要另外部署后端才能实现了,这种 breaking change 不应该至少 changelog 里提示一下吗

现在文档也没有,登录也没做,就直接把这个推进 main 了 这合适吗?

@PIKACHUIM
Copy link
Copy Markdown
Member Author

如果您已向123申请到第三方挂载应用的ClientID和ClientSecret,且想使用自己的这个应用进行Oauth2授权来获取RefreshToken和AccessToken注册驱动,可通过自行部署API来实现

这在之前版本是一个开箱即用的功能,现在变成需要另外部署后端才能实现了,这种 breaking change 不应该至少 changelog 里提示一下吗

现在文档也没有,登录也没做,就直接把这个推进 main 了 这合适吗?

这算哪门子breaking change... 登录的时候选这个不就行了,能不能看一下页面😅

image

另外,自己申请的OpenAPI无法通过官方API的刷新,设计如此

@WangEdward
Copy link
Copy Markdown
Contributor

这算哪门子breaking change... 登录的时候选这个不就行了,能不能看一下页面😅

这个后端除了自己部署 哪里支持传client_id+client_secret+refresh_token了?
https://github.com/OpenListTeam/OpenList-APIPages/blob/main/src/driver/123cloud_oa.ts

4.1.10 很正常的用三方应用刷新 更新到 4.2 直接认证失败了 这还不算 breaking 吗?

@PIKACHUIM

This comment was marked as resolved.

@Suyunmeng
Copy link
Copy Markdown
Contributor

这算哪门子breaking change... 登录的时候选这个不就行了,能不能看一下页面😅

这个后端除了自己部署 哪里支持传client_id+client_secret+refresh_token了? https://github.com/OpenListTeam/OpenList-APIPages/blob/main/src/driver/123cloud_oa.ts

4.1.10 很正常的用三方应用刷新 更新到 4.2 直接认证失败了 这还不算 breaking 吗?

你除非有其他第三方应用的secret,否则都不用refreshtoken这东西了,自己的开发者权益包只用填ClientID和ClientSecret就行了

@WangEdward
Copy link
Copy Markdown
Contributor

WangEdward commented Apr 9, 2026

你除非有其他第三方应用的secret,否则都不用refreshtoken这东西了,自己的开发者权益包只用填ClientID和ClientSecret就行了

我的第一个回复就说了 我有其他第三方应用的secret。。。

有自己的三方應用

@PIKACHUIM
Copy link
Copy Markdown
Member Author

API平台从来就没有支持过使用三方API+refreshtoken刷新

@WangEdward
Copy link
Copy Markdown
Contributor

WangEdward commented Apr 9, 2026

API平台从来就没有支持过使用三方API+refreshtoken刷新

你没有不代表其他人没有 三方应用一直是用 refresh token 的 https://123yunpan.yuque.com/org-wiki-123yunpan-muaork/cr6ced/gammzlhe6k4qtwd9 (编辑时间 2025-03-17)

原来的三种认证方式 这个 PR 之后就只有2能用了😅

  • 提供 RefreshToken ClientIDClientSecret AccessToken 可选)
  • 提供 ClientID ClientSecretAccessToken 可选)(个人密钥)
  • 仅提供AccessToken

@Suyunmeng
Copy link
Copy Markdown
Contributor

Suyunmeng commented Apr 9, 2026

API平台从来就没有支持过使用三方API+refreshtoken刷新

你没有不代表其他人没有 三方应用一直是用 refresh token 的 https://123yunpan.yuque.com/org-wiki-123yunpan-muaork/cr6ced/gammzlhe6k4qtwd9 (编辑时间 2025-03-17)

原来的三种认证方式 这个 PR 之后就只有2能用了😅

  • 提供 RefreshToken ClientID (ClientSecret AccessToken 可选)
  • 提供 ClientID ClientSecretAccessToken 可选)(个人密钥)
  • 仅提供AccessToken

第一种验证方式在123的2月大变更中已经废除,在文档中我们也只写了第二种认证方式,第三种方式是不稳定的故不会保留,该驱动最初设计时是按个人的OpenAPI规范来写的,并没有考虑到三方应用的规范(因为这完全不包含在预期的用户行为中),在2月大变更后,Oauth2被划分到三方APP,由于当时没有新的方案,所以我们也没有对这个驱动进行变更,直到前段时间我们获取到三方应用的官方授权才开始修改,而按照123文档的描述,我们只保留了文档中含有的个人开发者鉴权方式,然后才引入三方应用到正式驱动的授权中的,你的三方应用接入在之前能使用等于是卡了驱动之前个人和三方oauth2混用的bug,2月份的时候虽然个人Oauth2没了,但三方应用的Oauth2是正常的,所以你才能继续挂载,但现在我们正式引入了官方的三方应用挂载,那之前的驱动逻辑就要按新的123文档重新编写,故引发了你的这个问题

@WangEdward
Copy link
Copy Markdown
Contributor

第一种验证方式在123的2月大变更中已经废除,在文档中我们也只写了第二种认证方式,第三种方式是不稳定的故不会保留,该驱动最初设计时是按个人的OpenAPI规范来写的,并没有考虑到三方应用的规范(因为这完全不包含在预期的用户行为中),在2月大变更后,Oauth2被划分到三方APP,由于当时没有新的方案,所以我们也没有对这个驱动进行变更,直到前段时间我们获取到三方应用的官方授权才开始修改,而按照新的123文档,我们只保留了文档中含有的个人开发者鉴权方式,然后才引入三方应用到正式驱动的授权中的,你的三方应用接入在之前能使用等于是卡了驱动之前个人和三方oauth2混用的bug,2月份的时候虽然个人Oauth2没了,但三方应用的Oauth2是正常的,所以你才能继续挂载,但现在我们正式引入了官方的三方应用挂载,那之前的驱动逻辑就要按新的123文档重新编写,故引发了你的这个问题

感谢解答,请问现在是有新的123的开发者文档了吗?按照之前的文档 个人开发者鉴权 和 三方应用 鉴权只有登录和 token 刷新流程不同,其他都是一样的。

第一种验证方式在123的2月大变更中已经废除

我回退到 4.1.10 后使用 oauth2 的三方应用是正常的(RefreshToken ClientID ClientSecret)由于限流的原因 我从未使用过个人开发者鉴权,一直使用的是 oauth2 的三方鉴权

新的123文档

可以提供一下链接吗👀

@Suyunmeng
Copy link
Copy Markdown
Contributor

由于这种方式不在预期的设计行为中,所以驱动内直接使用原生的三方应用ClientID+ClientSecret+RefreshToken的刷新方式自然也不会受到保证,这个问题的讨论到此为止,都不用再争执了

@Suyunmeng
Copy link
Copy Markdown
Contributor

第一种验证方式在123的2月大变更中已经废除,在文档中我们也只写了第二种认证方式,第三种方式是不稳定的故不会保留,该驱动最初设计时是按个人的OpenAPI规范来写的,并没有考虑到三方应用的规范(因为这完全不包含在预期的用户行为中),在2月大变更后,Oauth2被划分到三方APP,由于当时没有新的方案,所以我们也没有对这个驱动进行变更,直到前段时间我们获取到三方应用的官方授权才开始修改,而按照新的123文档,我们只保留了文档中含有的个人开发者鉴权方式,然后才引入三方应用到正式驱动的授权中的,你的三方应用接入在之前能使用等于是卡了驱动之前个人和三方oauth2混用的bug,2月份的时候虽然个人Oauth2没了,但三方应用的Oauth2是正常的,所以你才能继续挂载,但现在我们正式引入了官方的三方应用挂载,那之前的驱动逻辑就要按新的123文档重新编写,故引发了你的这个问题

感谢解答,请问现在是有新的123的开发者文档了吗?按照之前的文档 个人开发者鉴权 和 三方应用 鉴权只有登录和 token 刷新流程不同,其他都是一样的。

第一种验证方式在123的2月大变更中已经废除

我回退到 4.1.10 后使用 oauth2 的三方应用是正常的(RefreshToken ClientID ClientSecret)由于限流的原因 我从未使用过个人开发者鉴权,一直使用的是 oauth2 的三方鉴权

新的123文档

可以提供一下链接吗👀

https://123yunpan.yuque.com/org-wiki-123yunpan-muaork/cr6ced/gn1nai4x0v0ry9ki

@Suyunmeng
Copy link
Copy Markdown
Contributor

Suyunmeng commented Apr 9, 2026

文档本身是没有什么变化,但他的实际行为发生了变化,原先个人也可使用Oauth2,所以才有了之前的代码,现在掐掉了自然只能完全按照官方规范来(前面说的新文档可能也有点歧义,抱歉)

@WangEdward
Copy link
Copy Markdown
Contributor

WangEdward commented Apr 9, 2026

https://123yunpan.yuque.com/org-wiki-123yunpan-muaork/cr6ced/gn1nai4x0v0ry9ki

这就是之前的文档啊 😨 这个个人开发者接入从设计之初就是一个有设计缺陷的东西 当时开放平台主要就是为了三方应用服务的 https://123yunpan.yuque.com/org-wiki-123yunpan-muaork/cr6ced/gammzlhe6k4qtwd9

现在把 oauth2 删了 如果过几个月123 把 oplist 的 token 封了 还得改回来不是白搭

而且 oplist 本就是 因为 alist 信任危机的分支,如果现在的设计是只能与 OpenList-APIPages 进行刷新 我认为是不合适的

@WangEdward
Copy link
Copy Markdown
Contributor

WangEdward commented Apr 9, 2026

文档本身是没有什么变化,但他的实际行为发生了变化,原先个人也可使用Oauth2,所以才有了之前的代码,现在掐掉了自然只能完全按照官方规范来(前面说的新文档可能也有点歧义,抱歉)

我原先使用的不是个人 oauth2。是和 oplist 现在拿到授权相同类型的 oauth2

所以需要和后端同样的 oauth2/access_token 接口

https://github.com/OpenListTeam/OpenList/pull/2293/changes#diff-29c98e4f9eed8dcc49c984f6ed1eccd5b6720113ad259b8988df5be6ed3e59feL17

@Suyunmeng
Copy link
Copy Markdown
Contributor

Suyunmeng commented Apr 9, 2026

文档本身是没有什么变化,但他的实际行为发生了变化,原先个人也可使用Oauth2,所以才有了之前的代码,现在掐掉了自然只能完全按照官方规范来(前面说的新文档可能也有点歧义,抱歉)

我原先使用的不是个人 oauth2。是和 oplist 现在拿到授权相同类型的 oauth2

我知道,但情况是原来个人Oauth2这个方式在的时候,都可用这种方式刷新,在代码行为上不会有太大问题 ,但是现在封了,这导致个人和三方应用的token刷新逻辑被割裂了,而我们太久没动这部分代码,也没有对这种情况有预期,所以是直接按照文档来重新改的,这个问题现在团队内争议很大,暂时代码应该是保持现状的了

@WangEdward
Copy link
Copy Markdown
Contributor

WangEdward commented Apr 9, 2026

我知道,但情况是原来个人Oauth2这个方式在的时候,都可用这种方式刷新,在代码行为上不会有太大问题 ,但是现在封了,这导致个人和三方应用的token刷新逻辑被割裂了,而我们太久没动这部分代码,也没有对这种情况有预期,所以是直接按照文档来重新改的,这个问题团队内争议很大,目前应该是保持现状的了

用个人申请的个人 id+secret 一直是走 /api/v1/access_token 的,123收费的也是这个接口。/api/v1/oauth2/access_token 的接口是给第三方软件用的,用户要过授权页后用 authorization_code 换 refresh_token + access_token,这个接口一直是会员包含的

@WangEdward
Copy link
Copy Markdown
Contributor

WangEdward commented Apr 9, 2026

这是两位在 123 open 认证逻辑上的第一个 PR,可能对之前的设计不是很清楚。

我觉得这个可以作为参考: #1121 (review)

OpenList 内,只需要提供两种就可以:

Client ID + Client Secret:开发者接入
Client ID + Refresh Token:第三方挂载应用接入(使用回调)
对于下面这两种,一般不会出现

Client ID + Client Secret + Refresh Token (这个和 2 相同)
Client ID + Client Secret + Code
因为第三方挂载应用接入的 Client Secret 通常不会公开,只会放到 OpenList-APIPages 上,而且一般申请不到,OpenListTeam不满足资质认证,不会主动对接

现在这个 PR 所做的是把2/3直接移动到了后端,并且强制使用 oplist 的 Client ID + Client Secret ;导致原先的可自定义被去除了

@PIKACHUIM
Copy link
Copy Markdown
Member Author

PIKACHUIM commented Apr 16, 2026

这是两位在 123 open 认证逻辑上的第一个 PR,可能对之前的设计不是很清楚。

我觉得这个可以作为参考: #1121 (review)

OpenList 内,只需要提供两种就可以:
Client ID + Client Secret:开发者接入
Client ID + Refresh Token:第三方挂载应用接入(使用回调)
对于下面这两种,一般不会出现
Client ID + Client Secret + Refresh Token (这个和 2 相同)
Client ID + Client Secret + Code
因为第三方挂载应用接入的 Client Secret 通常不会公开,只会放到 OpenList-APIPages 上,而且一般申请不到,OpenListTeam不满足资质认证,不会主动对接

现在这个 PR 所做的是把2/3直接移动到了后端,并且强制使用 oplist 的 Client ID + Client Secret ;导致原先的可自定义被去除了

这个描述我有反而点看不懂了...

1、Client ID + 开发者自己Client Secret:开发者接入——————————这是原先支持的,现在也支持
2、Client ID + 官方Client Secret + Refresh Token:官方APP接入 ————————本PR新增的
3、Client ID + 三方Client Secret + Refresh Token (这个和 2 相同)——————本PR新增后端支持,API并未支持过
4、Client ID + 官方/第三方 Client Secret + Code —————从未支持过,也不会支持

不应该存在所谓的

是把2/3直接移动到了后端,并且强制使用 oplist 的 Client ID + Client Secret

所以你的意思是希望:让API站支持功能3吗?通过API+自己的Secre刷新密钥?

lyy2005a2 pushed a commit to lyy2005a2/OpenList that referenced this pull request Apr 17, 2026
* feat(driver): support 123 official app api

* fix(123_open): migrate api refresh to token.go

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>

* fix(drivers/123_open): trigger proactive refresh with client credentials

* fix(drivers/123_open): use client-credential token endpoint for local refresh

Keep renewapi parsing for expires_in and map it to internal expiry time handling.

* fix(drivers/123_open): limit proactive refresh to client credentials

* fix(drivers/123_open): allow renewapi refresh token proactive init

* fix(drivers/123_open): update API address to use renewapi endpoint

* fix(drivers/123_open): simplify token refresh parsing

* fix(drivers/123_open): unify token expiration to expiredAt

---------

Signed-off-by: MadDogOwner <xiaoran@xrgzs.top>
Co-authored-by: MadDogOwner <xiaoran@xrgzs.top>
Co-authored-by: Suyunmeng <Susus0175@proton.me>
Co-authored-by: Suyunjing <suyunmeng@oplist.org.cn>
@WangEdward
Copy link
Copy Markdown
Contributor

3、Client ID + 三方Client Secret + Refresh Token ——————本PR新增后端支持,API并未支持过
所以你的意思是希望:让API站支持功能3吗?通过API+自己的Secret刷新密钥?

是指这个功能,而且这个功能一直是 openlist 用户端有实现的(4.2版本前)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Module: Driver Driver-Related Issue/PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 请问一下有兴趣申请123盘合作吗

4 participants